定义e如何从spring boot项目的application.properties中选择第二个数据源

时间:2018-04-07 19:35:38

标签: java hibernate spring-boot jpa datasource

我是弹簧规格的新手。我和JEE一起工作了很长时间。所以我了解到我们使用spring在application.properties文件中定义了数据源。

我如何在application.properties上定义两个或更多数据源以及如何选择第二个数据源? 如果我尝试使用spring.datasourceB.datasource.meta-datas定义第二个数据源,则该文件会显示一些标记为未知属性的标记。

我目前的情况是我建立了这样一个项目:

application.properties

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://xx.xx.xx.xx:3306/dbA?useSSL=false
spring.datasource.username=username
spring.datasource.password=password

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

spring.DSB.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

# Enable to auto identify each datasource
spring.jpa.database=default

我的存储库类看起来像这样:

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;

@Repository
public class ClassDaoDSA {

    @PersistenceContext
    private EntityManager manager;

    public List<T> Records() {

        String stmt = "SELECT d FROM Data d ORDER BY d.id DESC";

        return manager.createQuery(stmt).getResultList();
    }

}

当我使用JEE项目时,我可以使用@PersistenceUnit标记并在那里选择我的数据源。 我如何使用spring boot实现相同的结果?

1 个答案:

答案 0 :(得分:0)

您使用的命名约定不是强制性的,它只是让您无需配置。但您也可以使用配置类。这是我的一个项目的一个例子:

@Configuration
@PropertySource("app.properties")
public class DataConfig {
    @Autowired
    private Environment env;

    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        Resource config = new ClassPathResource("hibernate.cfg.xml");
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setConfigLocation(config);
        sessionFactory.setPackagesToScan(env.getProperty("myapp.entity.package"));
        sessionFactory.setDataSource(dataSource());
        return sessionFactory;
    }

    @Bean
    public DataSource dataSource() {
        BasicDataSource ds = new BasicDataSource();
        ds.setDriverClassName(env.getProperty("myapp.db.driver"));
        ds.setUrl(env.getProperty("myapp.db.url"));
        ds.setUsername(env.getProperty("myapp.db.username"));
        ds.setPassword(env.getProperty("myapp.db.password"));

        return ds;
    }
}

您可以拥有不同的属性文件并指定要在@PropertySource注释中使用的属性文件,或者您可以使用其他属性,如myapp.prod.db.url和myapp.test.db.url并设置数据根据需要来源。

相关问题