2017-09-24 10 views
0

私は春のブートで遊んでいて、プロフィール固有の設定ファイルを作成しようとしました。私はそれをapplication-local.ymlと呼んだ。春のブートがプロファイル固有のyamlファイルから読み取れません

、コメントを追加しました:

spring: 
profiles: 
    active: local 

mysql: 
    db: 
    url: jdbc:mysql://localhost:3306/db?serverTimezone=UTC 
    driverClassName: com.mysql.jdbc.Driver 
    username: root 
    password: 

hibernate: 
dialect: org.hibernate.dialect.MySQL5Dialect 
show_sql: false 

server: 
port: 8080 

そして、私のDatabaseConfig.javaファイルで、私はapplication-local.ymlから読み取られ、データベースを構成しようとする:

@Configuration 
@EnableTransactionManagement 
public class DatabaseConfig { 

    @Value("${spring.mysql.db.url}") 
    private String url; 

    @Value("${spring.mysql.db.username}") 
    private String userName; 

    @Value("${spring.mysql.db.password}") 
    private String password; 

    @Value("${spring.mysql.db.driverClassName}") 
    private String driverClassName; 

    //hibernate 
    @Value("${hibernate.dialect}") 
    private String hibernateDialect; 

    @Value("${hibernate.show_sql}") 
    private String hibernateShowSql; 

    @Bean 
    public DataSource dataSource() { 
     BasicDataSource dataSource = new BasicDataSource(); 
     dataSource.setUrl(url); 
     dataSource.setDriverClassName(driverClassName); 
     dataSource.setUsername(userName); 
     dataSource.setPassword(password); 
     return dataSource; 
    } 

    @Bean(name="entityManagerFactory") 
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() { 
     LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean = 
       new LocalContainerEntityManagerFactoryBean(); 
     localContainerEntityManagerFactoryBean.setDataSource(dataSource()); 
     localContainerEntityManagerFactoryBean.setPackagesToScan("xxxx"); 

     JpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter(); 
     localContainerEntityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter); 
     localContainerEntityManagerFactoryBean.setJpaProperties(hibernateProperties()); 
     return localContainerEntityManagerFactoryBean; 
    } 

    @Bean 
    public PlatformTransactionManager platformTransactionManager() { 
     JpaTransactionManager jpaTransactionManager = new JpaTransactionManager(); 
     jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject()); 
     return jpaTransactionManager; 
    } 

    private Properties hibernateProperties() { 
     Properties properties = new Properties(); 
     properties.put("hibernate.dialect", hibernateDialect); 
     properties.put("hibernate.show_sql", hibernateShowSql); 
     return properties; 
    } 
} 

今、私はそれが

にできないのですエラーが出ます

名前 'databaseConfig'を持つBeanの作成中にエラーが発生しました:自動従属依存の注入が失敗しました。ネストされた例外は、java.lang.IllegalArgumentExceptionがある:値にプレースホルダ「spring.mysql.db.url」を解決できませんでした「$ {spring.mysql.db.url}」

が、私は私のプロパティファイルの名前を変更しますapplication.yml。それは完璧に正常に動作します。

また、gradleコマンド:./gradlew -Dspring.profiles.active=local bootRunを使用して端末から実行しようとしましたが、同じエラーが発生します。これは、YAMLファイルをapplication.ymlにリファクタリングしたときにのみ機能します。私は間違って何をしていますか?私はlocal、dev、prodのような3つのプロファイルを持つつもりです。

+0

を試してみてください、あなたのGradleファイルに次のように追加しますか? –

答えて

0

どちらか

bootRun { 
    profile: local 
} 

またはあなたは、なぜあなたは、データソースの自動構成を使用していない、春のブートを使用している場合

./gradlew bootRun -Dspring.profiles.active=local 
関連する問題