web-dev-qa-db-ja.com

Spring Boot:アプリケーションのプロパティからデータソースを構成する方法

以下のコード値が欲しい:DriverClassNameUrlUsernamePasswordapplication.propertiesから読み取られるようにするファイル、それを行う方法?私はSpring Boot、Mysql、Hibernate、Spring Restを使用しています。

DatasourceConfig.Java

    //This is working fine with inline value specified as below (DriverClassName, Url,Username,Password
    @Configuration
    @EnableTransactionManagement
    @EnableJpaRepositories(basePackages = "com.nouhoun.springboot.jwt.integration.repository")
    public class DatasourceConfig {

        @Bean
        public DataSource datasource() throws PropertyVetoException {
               final DriverManagerDataSource dataSource = new DriverManagerDataSource();
               dataSource.setDriverClassName("com.mysql.jdbc.Driver");
               dataSource.setUrl("jdbc:mysql://localhost:3306/fdb?createDatabaseIfNotExist=true");
               dataSource.setUsername("root");
               dataSource.setPassword("");
               return dataSource;
    }
   ....
   ....
   ....
4
Dan

application.properties@SpringBootApplicationでデータソースプロパティを定義すると、datasourceが自動的に構成されるため、DataSource configurationを削除できます。ただし、データソースの設定をカスタマイズしたい場合は、Environmentがプロパティへのアクセスを提供するため、以下が機能します。

@Configuration
@PropertySource(value= {"classpath:application.properties"})
public class DatasourceConfig {

    @Autowired
    Environment environment;

    @Bean
    public DataSource datasource() throws PropertyVetoException {
        final DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(environment.getProperty("spring.datasource.driver-class-name"));
        dataSource.setUrl(environment.getProperty("spring.datasource.url"));
        dataSource.setUsername(environment.getProperty("spring.datasource.username"));
        dataSource.setPassword(environment.getProperty("spring.datasource.password"));
        return dataSource;
    }
}

または、Environment経由でプロパティにアクセスしたくない場合は、@Valueでアクセスできます。

  @Value("${spring.datasource.driver-class-name}")
    private String driverName;

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

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

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

    @Bean
    public DataSource datasource() throws PropertyVetoException {
        final DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(driverName);
        dataSource.setUrl(url);
        dataSource.setUsername(userName);
        dataSource.setPassword(password);
        return dataSource;
    }
3
kj007

Pom.xmlまたはbuild.gradleに依存関係を追加するのを忘れたか、すでに追加している場合はビルドにその依存関係がない(実行mvn clean install

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-Java</artifactId>
    <version>6.0.6</version>
</dependency>

追加してもう一度お試しください

0
Deepak Jain