2017-06-24 6 views
0

私はスプリングブートアプリケーションを実行しようとします。spring.profiles.active = production vs spring.profiles.active = localの相違点

application.propertiesファイルにはプロパティがあり、そのプロパティはspring.profiles.active=productionです。

ウェブでこのプロパティの詳細を検索しているうちに、私はspring.profiles.active=localを知っています。

誰でも親切にこれらの詳細を説明できますか?

答えて

0

特定の環境固有の開発用の選択肢は、アプリケーションが開発から運用に移行するときに適切でないか、動作しません。

たとえば、データベース構成を検討してください。開発環境では、 あなたは、このようにテストデータをプリロード組み込みデータベースを使用する可能性が高いです:生産の設定では

@Bean(destroyMethod="shutdown") 
public DataSource dataSource() { 
    return new EmbeddedDatabaseBuilder() 
    .addScript("classpath:schema.sql") 
    .addScript("classpath:test-data.sql") 
    .build(); 
} 

を、 あなたはJNDIを使用して、コンテナからDataSourceを検索することもできます。

@Bean 
public DataSource dataSource() { 
    JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean(); 
    jndiObjectFactoryBean.setJndiName("jdbc/myDS"); 
    jndiObjectFactoryBean.setResourceRef(true); 
    jndiObjectFactoryBean.setProxyInterface(javax.sql.DataSource.class); 
    return (DataSource) jndiObjectFactoryBean.getObject(); 
} 

Spring 3.1以降、プロファイルを使用できます。 Method-leve @Profile注釈はSpring 3.2から始まります。 Spring 3.1ではクラスレベルのみです。

@Configuration 
public class DataSourceConfig { 
    @Bean(destroyMethod="shutdown") 
    @Profile("development") 
    public DataSource embeddedDataSource() { 
     return new EmbeddedDatabaseBuilder() 
     .setType(EmbeddedDatabaseType.H2) 
     .addScript("classpath:schema.sql") 
     .addScript("classpath:test-data.sql") 
     .build(); 
    } 

    @Bean 
    @Profile("production") 
    public DataSource jndiDataSource() { 
     JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean(); 
     jndiObjectFactoryBean.setJndiName("jdbc/myDS"); 
     jndiObjectFactoryBean.setResourceRef(true); 
     jndiObjectFactoryBean.setProxyInterface(javax.sql.DataSource.class); 
     return (DataSource) jndiObjectFactoryBean.getObject(); 
    } 
} 

DataSource豆は、それぞれのプロファイルにあり、所定のプロファイルがアクティブである場合にのみ作成されます。プロファイルが指定されていないBeanは、アクティブなプロファイルに関係なく、常に作成されます。

プロファイルに任意の論理名を付けることができます。

0

このプロパティを使用すると、どのプロファイルをアクティブにするか(アプリケーションの起動時に使用する)を知ることができます。たとえば、application.propertiesに、または引数-Dspring.profiles.active = prodを指定すると、あなたは春にprodプロファイルで実行するように指示します。つまり、Springは "application-prod.yml"または "application-prod.properties"ファイルを探し、その下にあるすべてのプロパティをロードします。

@Profile( "PROFILE_NAME")によってBean(メソッドまたはクラス)に注釈を付けることもできます。これにより、Beanが確実に特定のプロファイルにマップされます。

複数のプロファイルをspring.profiles.activeに渡すことができます。ドキュメント内

詳細情報 - あなたはあなたの答えには、構文の強調表示やテキストの書式を使用している場合https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html

+0

あなたの答えは、より明確になるだろう。また、あなたが本当に 'bean(メソッドやクラス)に注釈を付ける必要がある場合を除き、あなたのスペルをチェックすることを傷つけることはできませんでした。また、実行時環境とdev/localとproductionの違いについても言及できますか? –