我正在使用Spring Boot开发两个应用程序,一个用作服务器,另一个是客户端应用程序。但是,它们都是同一个应用程序,根据活动配置文件的功能有所不同。我正在使用Spring Boot的自动配置功能来配置我的应用程序。
我想在客户端应用程序上禁用所有与数据库相关的自动配置,因为它不需要数据库连接。应用程序不应尝试与数据库建立连接,也不应尝试使用任何Spring Data或Hibernate功能。启用或禁用数据库自动配置应该是有条件的,并且应基于应用程序的活动配置文件。
我可以通过为各自的配置文件创建两个不同的application.properties文件来实现此目的吗?
我尝试将其添加到属性文件中,
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration\ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration\ org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration\ org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration
但是,该应用程序仍然尝试在启动时连接到数据库。这些排除条件足以满足我的要求吗?
我做类似事情的方式是:
@Configuration @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) @Profile ("client_app_profile_name") public class ClientAppConfiguration { //it can be left blank }
为服务器应用程序编写类似的内容(不排除)。
最后一步是从主spring引导类禁用Auto Configuration:
@SpringBootApplication public class SomeApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(SomeApplication.class); } protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(SomeApplication.class); } }
更改@SpringBootApplication为:
@SpringBootApplication
@Configuration @ComponentScan
这应该做的工作。现在,我在示例中排除的依赖项可能不完整。它们对我来说足够了,但是我不确定是否完全禁用数据库相关的库。检查以下列表以确保:
http://docs.spring.io/spring-boot/docs/current- SNAPSHOT/reference/htmlsingle/#auto-configuration- classes
希望能有所帮助