第一种:spring.factories中配置
Firstinitializer类
package com.example.demo.initializer;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.annotation.Order;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.PropertySource;
import java.util.HashMap;
import java.util.Map;
@Order(1)
public class Firstinitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
ConfigurableEnvironment environment = applicationContext.getEnvironment();
Map map = new HashMap<>();
map.put("key1","value1");
PropertySource<?> propertySource = new MapPropertySource("firstinitializer",map);
environment.getPropertySources().addLast(propertySource);
System.out.println("run firstinitializer");
}
}
resources目录下新建 : META-INF/spring.factories
org.springframework.context.ApplicationContextInitializer=com.example.demo.initializer.Firstinitializer
第二种:启动类中配置
SecondInitializer类
package com.example.demo.initializer;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.annotation.Order;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.PropertySource;
import java.util.HashMap;
import java.util.Map;
@Order(2)
public class SecondInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
ConfigurableEnvironment environment = applicationContext.getEnvironment();
Map map = new HashMap<>();
map.put("key2","value2");
PropertySource<?> propertySource = new MapPropertySource("secondinitializer",map);
environment.getPropertySources().addLast(propertySource);
System.out.println("run secondinitializer");
}
}
启动类
package com.example.demo;
import com.example.demo.initializer.SecondInitializer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(DemoApplication.class);
springApplication.addInitializers(new SecondInitializer());
springApplication.run(args);
}
}
第三种:application.properties中配置
ThirdInitializer类
package com.example.demo.initializer;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.annotation.Order;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.PropertySource;
import java.util.HashMap;
import java.util.Map;
@Order(3)
public class ThirdInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
ConfigurableEnvironment environment = applicationContext.getEnvironment();
Map map = new HashMap<>();
map.put("key3","value3");
PropertySource<?> propertySource = new MapPropertySource("thirdinitializer",map);
environment.getPropertySources().addLast(propertySource);
System.out.println("run thirdinitializer");
}
}
application.properties
context.initializer.classes=com.example.demo.initializer.ThirdInitializer
测试类
TestService
package com.example.demo.service;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class TestService implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public String test1(){
return applicationContext.getEnvironment().getProperty("key1");
}
public String test2(){
return applicationContext.getEnvironment().getProperty("key2");
}
public String test3(){
return applicationContext.getEnvironment().getProperty("key3");
}
}
tips
- 都要实现ApplicationContextInitializer接口
- Order值越小越先执行
- application.properties中定义的优先于其他方式