I consider myself still fairly new to Spring and Spring boot. I have inherited a multi-module project that is structured like this:
project
|
+- api module
|
+- app module
|
+- rest client module
The app module contains the controllers. The jar created from rest client module is a dependency that is meant to be used by other projects. The rest client module makes rest calls to the app module, so that those other projects don't have to make the rest calls themselves.
I have been able write integration tests for the controllers in the app module, but I've been struggling with trying to write integration tests for the classes in the rest client module. My understanding is that the rest client module does not load up a Spring context since there is no #SpringBootApplication-annotated class like the app module has.
I think my questions then are:
should I be trying to write integration tests for classes in the rest client module?
if so, how do I do this?
Thanks in advance.
We have an existing Spring MVC based application. I was asked to plug-in a customization/utility to this project. I am not supposed to do any changes to the existing application.
For the new utility, I thought of doing it through a Spring boot jar. I created a Spring boot jar and placed in the lib folder of the existing application. However, I am facing few issues with this approach and wanted to know if this is the correct approach and if there are any suggestions out there. The issues are:
The logging level of the Spring boot affects the logging level of the existing application. How can I avoid that?
The Spring MVC application and the Spring boot jar both are based on different versions of Spring. What if there are some common class files or packages in both Spring MVC application and the Spring boot jar but with different versions? Will this create any conflicts or will it affect the functionality? I don't want my Spring boot jar to affect the functionality/logging of the existing application. I just want the Spring boot jar to work whenever it is being called explicitly.
For logging issue, I have tried to use something like below in application.properties file but the issue with that is that those settings are considered only if you run the application through #SpringBootApplication main class. But if you just want to package your functionality in a jar file then the application.properties file is not considered.
logging.level.org.springframework = OFF
We are in the initial stages of converting a Struts 1.2.9 application to Spring MVC. While the impact has been analyzed and well documented and understood for this migration, we are uncertain if we should introduce Spring Boot in this equation.
I have been reading other threads and would like to state that we are not looking to integrate Struts with Spring - rather we are for sure migrating and moving out of Struts to Spring MVC.
Given this background, invite suggestions/thoughts around below:
Benefit of introducing Spring Boot in this process is more of a distant one of an eventual move to Cloud. As such the team has completed the initial configuration required for a Spring application (like web.xml, required jars, spring-servlet.xml) and not sure of immediate benefits for us.
In case we decide to use Spring Boot in this process, we perceive the impact to be:
i. Add spring-boot-starter-web to our gradle build.
ii. Create a starter Application class
iii. Revisit configurations in web.xml like startup servlets using 'SpringBootServletInitializer'
iv. Continue to use a war based traditional deployment using gradle war plugin. Does this package the spring based libraries into the war or should the libraries be on the server classpath?
I welcome thoughts/suggestions/rejections of this as an approach itself :).
We have a plain java web project with some servlets, some JPAs and our logic.
We want to move to Cloud Foundry . I have learnt that Spring boot comes up with a lot of nice cloud foundry features out of the box like support for CF environment variables parsing, CF service broker API implementation.
Now i don't want to move to Spring MVC since we already have the application running with plain java web framework.
Can i still use Spring cloud foundry related projects to take advantage of Cloud Foundry related features like parsing of env variables ?
Are they internally dependent on Spring core, spring mvc projects ? Will including the Spring Cloud Foundry project bloat my total deployable war size due to all internal spring dependencies.
Best Regards,
Saurav
A lot of this depends on exactly which features you want to use. The awesomeness you get from Spring Boot requires Spring & so it won't transfer to your app unless you embrace & use Spring. The same goes for Spring Cloud.
You specifically mentioned parsing service information from environment variables (i.e. VCAP_SERVICES & VCAP_APPLICATION). This is the one exception that comes to mind. You can use Spring Cloud Connectors in a limited capacity without Spring. See this link for details. It's not as full-featured as what you'd get if you were using Spring & Spring Boot, but it will give you some help.
If you don't want to use SCC, you can always parse the environment variables yourself and use the data. It's conceptually very easy. Both VCAP_APPLICATION & VCAP_SERVICES are environment variables and the value is a JSON blob so all you need to do is parse the JSON and locate the information that you need.
Hope that helps!
Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 6 years ago.
Improve this question
For a large company (web) project, do you recommend using Spring MVC or Spring-Boot?
Spring-Boot, in terms of configuration, is very easy compared to Spring MVC.
I wonder if I use Spring-Boot can have the same advantages of Spring MVC?
What do you recommend?
My personal advice is to definitely use Spring Boot for many reasons.
The first is that Boot is the "future of Spring". That means that with Boot
you can benefit from many commitments of the Spring community. Most of the
Spring projects today are completely
integrated with Boot, even the community starts to develop many
applications based on Boot. For example for managing and monitoring.
I can suggest to see Spring Boot Admin
With Spring Boot you can benefit from very nice and useful features such as
actuator and remote shell for managing and monitoring, that
improves your application with production ready features that are very
useful.
Very nice and powerful properties and configuration controls - you
can configure your application with application.properties/yml
and extend the boot in a very simple and impressive way, even the
management in terms of overriding is very powerful.
It is one of the first micro-service ready platforms, and in my opinion
nowadays it is the best! Even if you don't build a micro-service
project with boot you can benefit of using a modern approach in which
you have a auto-consistent jar that can benefit from all the features
that I described above or if you prefer you can impose the packaging
as a classical war and deploy your war in any of the containers that
you want.
Use of an intelligent and convention over configuration approach that
reduces the startup and configuration phase of your
project significantly. In fact you have a set of starter Maven or Gradle dependencies
that simplify the dependency management. Then with the
auto-configuration characteristic you can benefit from a lot of
standard configurations, that are introduced through the Conditional Configuration framework
in Spring 4. You can override it with your specific
configurations just defining your bean according with the
convention that you can see in the auto-configure JAR of the Boot
dependency. Remember that Spring is open-source and you can see the code. Also the documentation in my opinion is good.
Spring initializer is a cool tool attainable at this link:
https://start.spring.io/ is a very cool tool just to create your project in a very fast way.
I hope that this reflection can help you decide what is the best solution.
Spring Boot uses Spring MVC! It's just autoconfigured and ready to use when you import the spring-boot-starter-web jar. So you'd basically are talking about whether to use Spring Boot or manually setup your Spring Application...
You can definitely go for Spring Boot. We have already started using Spring Boot for building enterprise application. It has lot of advantages, listing few below here:
Your project configuration will be pretty simple. No need to maintain XML file, all you need to know is how efficiently you can use application.properties file.
Gives lot of default implementation, for instance if you need to send an email, it provides default implementation of JavaMailSender
Spring Hibernate and JPA integration will be pretty simple.
Like this there are many, you can explore based on your needs.
You can use Spring MVC with spring boot as #kryger said, they are non exclusive between them, and the configuration will be easier, also I recommend you to use http://www.thymeleaf.org/ which is template framework. Working with that is like working with JSP but thymeleaf integrates seamlessly with HTML, so your code will look very clean and you can add a lot of useful features.
I think Spring Boot is more useful than the MVC, as it has many advantages and inbuilt features which make it more reliable than MVC. In Spring Boot most of the things are auto configured and there is no need of writing those xml as we do in the MVC, which can save time.
Spring Boot bundles a war file with server run-time like Tomcat. This allows easy distribution and deployment of web applications. As the industry is moving towards container based deployments, Spring Boot is useful in this context as well.
Spring MVC is web application framework. While you can do everything in Spring without Spring Boot, but Spring Boot helps you get things done faster.
Spring boot simplifies your Spring dependencies, no more version collisions,
can be run straight from a command line without an application container,
build more with less code - no need for XML, not even web.xml, auto-configuration, useful tools for running in production, database initialization, environment specific config files, collecting metrics.
Basics of Spring Boot can be found here