springboot 如何在springboot启动的jar文件外,加载配置文件或者启用配置参数
一. 加载的配置文件顺序
- /config 当前目录的/config目录下
- 当前目录
- classpath下的config目录
- classpath的根目录
二. jar文件外加载配置文件
-
通过环境变量 SPRING_APPLICATION_JSON='{“server”:{“port”:“8080”}}'
-
spring.location.config指定application.properties加载目录
-
通过命令行参数指定具体的变量的值 –params server.port=8080 -Dserver.port=8080
-
配置文件提供随机值和uuid的生成
my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number.less.than.ten=${random.int(10)}
my.number.in.range=${random.int[1024,65536]}
注入变量
@Service public class UserService { private final String svnUrl;
@Autowired
public UserService(@Value("${SVN_URL}") String svnUrl) {
this.svnUrl = svnUrl;
}
}
//静态注入
@Service
public class UserService {
private static String SVN_URL;
@Value("${SVN_URL}")
public void setSvnUrl(String svnUrl) {
SVN_URL = svnUrl;
}
}
动态注册bean
@Configuration
public class DynamicBeansConfiguration {
@Bean
public BeanDefinitionRegistrar beanDefinitionRegistrar(Environment environment) {
return new BeanDefinitionRegistrar(environment);
}
public class BeanDefinitionRegistrar implements BeanDefinitionRegistryPostProcessor {
private Environment environment;
public BeanDefinitionRegistrar(Environment environment) {
this.environment = environment;
}
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
List<Developer> developers = Binder.get(environment)
.bind("developers", Bindable.listOf(Developer.class))
.orElseThrow(IllegalStateException::new);
developers.forEach(developer -> {
GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
beanDefinition.setBeanClass(Developer.class);
beanDefinition.setInstanceSupplier(() -> new Developer(developer.getName()));
registry.registerBeanDefinition(developer.getName(), beanDefinition);
});
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
}
}
}