Java for a developer with small business

I have had a taste of every major programming language under the sun, including functional. But frankly, the ecosystems for most other modern languages/platforms are often very poor and just exhausting, and I'm looking to turn to something stable and still active, so I'm currently re-evaluating Java, which I have had experience with but nothing server-side/web-based. Ruby (particularly, Rails) is still active and productive, but both the quality of information and size of the community seem to be declining in the past 5ish years.

Microsoft has given me little confidence to follow their lead any more with the .NET (Core) platform. Then again, I've had a lot of problems with Java as a language and while streams and lambdas are a welcome addition, the changes around Java lately have been a little WTF as well from an outsider's perspective and I'm concerned about that as well (Oracle's licensing change for their JVM distributions, the JavaEE ownership transfer, the Java trademark thing I *think* causing the Jakarta rename, IBM buying RedHat to me is a wildcard too as with any acquisition).

My client is a small business and I'll be building a web app for them. Very low concurrent users, but data will be in gigabytes. Server-side rendered MVC is plenty fine and probably preferable (with a little JS). Lots of CRUD operations. Multitenancy may come up. There's no requirement for an API, and in fact a website monolith would probably be easier / more productive. I plan to integrate with AWS S3 at a minimum and hope to host on a low-fuss platform like Beanstalk.

A free runtime environment or app server like Tomcat is a must. Comprehensive documentation is a must. And some basic, but solid web security is a must. And there must be decent productivity from the beginning - I'm not above a configuration file, but I can't spend a week to a month just doing boilerplate, which I often hear complaints about with Spring MVC. To reiterate, I'm plenty familiar with Java as a language, particularly pre-1.8, but I've never really touched a servlet.

So those are my constraints, which don't seem to be often discussed here. I've played around with Spring Boot a little bit which seems nice out of the box, until I realized the login mechanism the starter project it generates is worthless (1 ephemeral username + password), and taking the seed project and trying to add database authentication with hashed passwords has been surprisingly difficult. The Spring security docs have like 1 paragraph on this and refer you to insufficient examples, despite the density of the documentation overall.

 

Particularly, trying to seed the app with initial users that pass them through the same bcrypt hasher has left me at a loss (it would be dubious to try to do this with a sql seed file given it requires whitebox knowledge of the password encoder). But then I realized this is probably not a common enterprise scenario when you have stuff like LDAP and SPAs doing JWTs.

 

This brings me back to the nagging feeling that the Java ecosystem is still really made for big teams in big organizations, doing microservices and high scalability and message queues and reactivity etc., and may a poor fit for a project like this. Yet it seems to check so many other boxes. So I'd appreciate any input as to how Java, whether it's JavaEE, Spring, some other framework, etc. are a good fit for me and this project, or any frank suggestions that Java is not worth my time for this given that my skills are not *already* much invested in this ecosystem.

 

Related blog:

java collection tutorials