Performance degradation migrating app from Spring to Spring Boot - java

We have a legacy webapp that we would like to upgrade to Spring Boot 1.5.8.RELEASE. We have run a load test on the legacy webapp and then ran the same load test on the version where we migrated to Spring boot while profiling the app using YourKit. We see saw ~50% slower for response times in the migrated app. It's a REST API webapp. We found that there were 2 areas where we saw slowdowns.
mysql methods (e.g. com.mysql.jdbc.PreparedStatement.executeQuery() PreparedStatement.java)
ApplicationFilterChain
The mysql method is shown as a hotspot in the Spring Boot app, but not the legacy one even though we're using the same mysql connector and same DB configurations.
Things we checked/tried
We checked that the dependency trees are identical
All app configurations are identical
We are running the tomcat in the legacy app and using embedded tomcat in Spring Boot
Questions
Are there are any areas we should be looking into?
Are there good resources on the web for identifying and fixing performance issues during Spring Boot migrations?
What have been your experiences with migrating to Spring Boot?
How else should we be using YourKit to identify performance issues?
Dependency Differences
mvn dependency:list
Diff of the two dependency lists from calling mvn dependency:list

Related

How to connect Kafka to legacy Spring

I am working on PoC of connecting legacy Spring application to Kafka. It is war application to be deployed in Tomcat, Spring version 4.3.12. Is there some library to make communication with Kafka almost as easy as with Spring Boot? I need just fundamental operations: sending message, listening for confirmation, receiving.
I have some experience with Spring Boot support as is provided in org.springframework.kafka:spring-kafka library. I am not sure how to efficiently adopt Kafka for legacy Spring - I'm thinking of using Kafka Java client which looks promising but as I am used to working at Spring Boot abstraction level I don't have clue how much code should I supply myself.
Web search is not much helpful in this case since it tends to show Spring Boot-related solutions. Migration of legacy application is considered too, I just need to have some idea how difficult each way is.
kafka-clients is all you need (from Maven Central, not Confluent). You could go a step further and look into Log4j2 Kafka bridge, then property files for that.
If you want to externalize config into regular Java .properties file, you can, or you can pull values from environment variables, if you follow 12-factor principles.
But if you don't already have Spring Boot dependencies, then I do not think adding them is worth it for only Kafka.
Also, the Spring-Kafka documentation covers how to configure your app without Boot.

Spring MVC or Spring Boot for wildfly deployment

I am converting Java web project into Spring Project. (10 JSP and 5 controllers connecting to DB)
We are using Wildfly server for deployment.
Is there any use of creating Spring Boot project (though i have facilities like actuators, starters etc.)
or
Is it fine to create Spring MVC Project and deploy the war in Wildfly as i am not using any container here and spring boot project will be an overhead? Basically i am finding why should i use spring boot here?
it depends.
Spring boot is just SpringMVC + Tomcat in one JAR (very simplified definition, I know).
If you have an existing and working Wildfly Server, use it. Compile your web app as WAR an deploy it. You will have also better configuraiton, server update and server bugfixing possibilities. At least that was in my case, as my team mates had a lot of experience with Wildfly.
We are using SpringBoot for small pure REST (micro)services (without HTML, JSP), since they are fast to implement and to deploy (just run a jar file). All of these applications have their own Tomcat server - with own PORT. If you want a new Tomcat version you have to recompile your application. This could be a disadvantage (but not realy).

Error occurred during initialization of VM for spring version test

I am about to start to learn Spring Framework. For that, I had to set up the runtime environment in which I am having a problem. I have installed java and Spring boot CLI. I had set up all the paths as well. However, I get an error of
An error occurred during initialization of VM
Unable to load native library: The specified procedure could not be found
whenever I type spring in cmd.
When I google about this problem, I found a whole lot of complex stuff, and I am just beginner. Any help will be appreciated.
Basically, java and maven/gradle are pretty much the Spring Boot starter pack.
There are lots of examples of how to start development with spring boot, especially on the pivotal site itself.
For example:
1 - Developing Your First Spring Boot Application
2 - Building an Application with Spring Boot
Also, i recommend you start first through the initializr. Later, you can look for more advanced tools and/or options to manage your project.

Spring boot basic

Just started exploring spring boot and trying to understand.....
In a normal project scenario, we create multiple projects / modules depending on functionality. Ultimately, package all different jars , wars in .ear and deploy it.
With spring boot, new project are deployed on a separate of instances of tomcat.
But if all these projects are related, it will need reconciliation of proprty files and any other resources differently utilized, before you create .ear.
While I understand the advantages of spring boot while development, is there any thought on how to make this process better when using spring boot?
Modern cloud architectures are moving away from using property files. Your Ops or DevOps teams should appreciate if your app would accept configurations via system properties. Spring Boot is perfectly suited for that.
Older fashioned orchestrators would replace placeholders in your properties files during deployment phase.

What do I need to download to start developing apps using the Spring framework?

I need to start developing applications using the Spring framework, and am wondering what tools I need to download to have me up and running.
On the SpringSource website I am seeing all these applications to download and I am wondering, do I really need all this? And what versions should I use, especially for Spring Framework?
Spring Framework
SpringSource dm Server Samples
Spring Security
Spring Web Flow
Spring Web Services
Spring Dynamic Modules
Spring Integration
Spring Batch
Spring.NET
Spring JavaConfig
Spring LDAP
Spring Extensions
Spring IDE
Spring BlazeDS Integration
SpringSource Bundlor
Spring ROO
What other applications do I need to download (eg. Struts, Glassfish, Apache, etc.)?
This depends on what you want to use Spring for. Typically that's Web applications. If so you only need two things:
Spring framework (with minimal dependencies); and
A servlet container (eg Tomcat) or a full-blown application server (eg Glassfish, JBoss).
Everything else is optional. I believe the only required dependency is Apache Commons logging. Depending on what features you use, you may well need more.
If so, here is a [tutorial][1] that creates a barebones Spring MVC project. There are countless others around for that and other topics.
It's entirely possible to use Spring in, say, a Swing application in which case you obviously don't need a servlet container.
All you need from SpringSource is the Spring Framework.
Spring 3.0 is on the way, but for now, use 2.5.6.SEC01, the current production release.
You can get started with a simple servlet container (ie: Tomcat) rather than a full blown application server (eg: JBoss, Glassfish).
The Spring Framework comes bundled with jars for web development - ie: spring-web and spring-webmvc.
See #117535 for a simple example of using Spring MVC.
It mainly dependent on what you need Spring for. Each and every piece of Spring can, actually, be used in separation from the rest. You may use it only for IOC, in this case you don't need, for example, MVC and Servlets, etc...
The easiest way to start is to dowload the main package from http://www.springsource.com/download/community?project=Spring%20Framework
You can use Spring from any IDE
The best way is to use Maven with your project. Basically all you have to do is edit your pom.xml file and tell it that you want to use Spring. Then when you compile your code, Maven will go out and automatically download the Spring libraries you need from their public repository.
Here's an example:
http://pookey.co.uk/blog/archives/63-Getting-started-with-Maven-and-Spring.html

Categories