Spring中@Profileの役割を実例で知る


この文章は主に実例を通してSpringの中@Profileの役割を理解しています。例コードを通して紹介された非常に詳細で、皆さんの学習や仕事に対して一定の参考学習価値を持っています。必要な友達は参考にしてください。
Profileは、システム環境によってデータソースを切り替えることができます。例えば、開発、テスト、生産環境のデータソースを切り替える。
例を挙げます
まず配置類MainProfileConfigを作成します。

@Configuration
@PropertySource("classpath:/jdbc.properties")
public class MainProfileConfig implements EmbeddedValueResolverAware {

  @Value("${db.user}")
  private String user;

  private String driverClass;

  private StringValueResolver stringValueResolver;

  @Profile("test")
  @Bean("testDataSource")
  public DataSource getTestDataSource(@Value("${db.password}") String pwd) throws PropertyVetoException {
    ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
    comboPooledDataSource.setUser(user);
    comboPooledDataSource.setPassword(pwd);
    comboPooledDataSource.setDriverClass(driverClass);
    return comboPooledDataSource;
  }

  @Profile("dev")
  @Bean("devDataSource")
  public DataSource getDevDataSource(@Value("${db.password}") String pwd) throws PropertyVetoException {
    ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
    comboPooledDataSource.setUser(user);
    comboPooledDataSource.setPassword(pwd);
    comboPooledDataSource.setDriverClass(driverClass);
    return comboPooledDataSource;
  }

  @Profile("pro")
  @Bean("proDataSource")
  public DataSource getproDataSource(@Value("${db.password}") String pwd) throws PropertyVetoException {
    ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
    comboPooledDataSource.setUser(user);
    comboPooledDataSource.setPassword(pwd);
    comboPooledDataSource.setDriverClass(driverClass);
    return comboPooledDataSource;
  }

  @Override
  public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) {
    this.stringValueResolver = stringValueResolver;
    driverClass = stringValueResolver.resolveStringValue("${db.driverClass}");
  }
}
ここで@ValueとStrigValueResolaverを使って属性に値を付けます。
テスト:運転時に環境を設定する-Dspring.profiles.active=dev

public class ProFileTest {

  @Test
  public void test(){
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainProfileConfig.class);

    String[] beanNamesForType = applicationContext.getBeanNamesForType(DataSource.class);
    for (String name : beanNamesForType){
      System.out.println(name);
    }
    applicationContext.close();
  }
}
印刷出力:
devDataSource
コードを使ってシステム環境を設定し、容器を作成する際に無参構造方法を使用して属性を設定することもできます。

@Test
  public void test(){
    //    
    AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
    //         
    applicationContext.getEnvironment().setActiveProfiles("test");
    //      
    applicationContext.register(MainProfileConfig.class);
    //      
    applicationContext.refresh();

    String[] beanNamesForType = applicationContext.getBeanNamesForType(DataSource.class);
    for (String name : beanNamesForType){
      System.out.println(name);
    }
    applicationContext.close();
  }
印刷出力:
testDataSource
setActive Profilesは環境を設定すると複数の値を入力できます。その方法は複数のパラメータを受け入れることができます。

public interface ConfigurableEnvironment extends Environment, ConfigurablePropertyResolver {
  void setActiveProfiles(String... var1);
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。