希望能实现如下的功能:
在 springboot 启动前,先通过读取 application.properties 文件
判断是否已经配置 redis, 数据库等设定。
如果没有设定,自动进入安全模式,只自动装配 springmvc, 以及 config 下的 controller。这样用户可以通过前台页面,设定参数。
如果已经设定,则进入生产模式。全部装配。
同时也可以通过命令行, 或者 -Dspring.profiles.active=safemode 来进入安全模式。
目前的代码已经实现,但是感觉不够好。有没有更好的实现方式。
目前的代码如下:
启动类:
public class SbApplication {
public static void main(String[] args) throws Exception {
String profile = System.getProperty("spring.profiles.active");
if(profile == null) {
profile = judgeProfile();
System.setProperty("spring.profiles.active", profile);
}
if("Safe".equals(profile)) {
SbApplicationSafe.start();
}else if("Normal").equals(profile)){
SbApplicationNormal.start();
}
}
}
安全模式类:
@EnableJpaRepositories
@SpringBootApplication(exclude = {
RedisAutoConfiguration.class,
RedisRepositoriesAutoConfiguration.class,
DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class,
HibernateJpaAutoConfiguration.class,
QuartzAutoConfiguration.class,
TaskSchedulingAutoConfiguration.class,
SecurityAutoConfiguration.class })
@Conditional(SbApplicationSafe.class)
public class SbApplicationSafe implements Condition {
public static void start() {
SpringApplication.run(SbApplicationSafe.class);
}
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return "Safe".equals(System.getProperty("spring.profiles.active"));
}
}
正常模式类:
@SpringBootApplication
@EnableJpaRepositories
@Conditional(SbApplicationCluster.class)
public class SbApplicationCluster implements Condition {
public static void start() {
SpringApplication.run(SbApplicationCluster.class);
}
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return "Cluster".equals(System.getProperty("spring.profiles.active"));
}
}