二、springboot之datasource和entitymanage配置

 

上一篇已经讲过了如何搭建一个springboot demo;这一篇开始谈谈springboot的数据源配置。

配置分为两种,一种是默认配置,这个就比较简单了,如果是单纯想要配置的话,看完前两点就可以去实践类了;如果对真实配置过程想要了解的话可直接移步到第3点。

1.配置dataSource

其实springboot已经很全面了,我们只需要将application.properties配置文件加上如下配置

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

启动程序,dataSource就默认加载到容器中了。

可以使用如下方法测试,也可以直接使用注解注入;这里就展示前者。

@RunWith(SpringRunner.class)
@SpringBootTest
public class MonsterlanApplicationTests {
   @Autowired
   DataSourceProperties dataSourceProperties;

   @Autowired
   ApplicationContext applicationContext;

   @Test
   public void contextLoads() {
      // 获取配置的数据源
      DataSource dataSource = applicationContext.getBean(DataSource.class);
      // 查看配置数据源信息
      System.out.println(dataSource);
      System.out.println(dataSource.getClass().getName());
      System.out.println(dataSourceProperties);
   }
}

2.配置entityManager

这个就更方便了,数据源配置好后;直接在你想用的地方注入entityManager就行。

@PersistenceContext
protected EntityManager entityManager;

从控制台的打印日志可以看出springboot启动时会默认通过一个持久化单元‘default’来配置entityManagerFactory,而entityManager又是entityManagerFactory创建的。

Building JPA container EntityManagerFactory for persistence unit 'default'
Initialized JPA EntityManagerFactory for persistence unit 'default'

以上两点就算配置完成了,现在就可以使用entityManager去做增删查改。

3.自定义配置

以上讲的都是默认配置,挺方便的;但是对于整个过程完全看不明白,对于配置多数据源也不够灵活。下面开始简单介绍自定义配置。

a.配置datasource

这里配置前缀不使用默认的spring.datasource,换位spring.otherdatasource,这个看个人意愿。

spring.otherdatasource.url=jdbc:mysql://127.0.0.1:3306/zhy?characterEncoding=utf-8&useSSL=false
spring.otherdatasource.username=root
spring.otherdatasource.password=root
spring.otherdatasource.driver-class-name=com.mysql.jdbc.Driver
spring.otherdatasource.type=com.alibaba.druid.pool.DruidDataSource
@Configuration
public class DataSourceConfig {

    @Bean(name = "mysqlDataSource")
    @Qualifier("mysqlDataSource")
    @ConfigurationProperties(prefix="spring.otherdatasource")
    public DataSource getMyDataSource(){
        return DataSourceBuilder.create().build();
    }
    
}

 b.配置entityManager

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "entityManageFactoryPrimary",
        transactionManagerRef = "transactionManagerPrimary",
        basePackages = {"com.lawliet.core.dao"}
)
public class EntityManageConfig {

    @Autowired
    @Qualifier("mysqlDataSource")
    private DataSource mysqlDataSource;

    @Primary
    @Bean(name = "entityManagerPrimary")
    public EntityManager entityManager(EntityManagerFactoryBuilder builder){
        return entityManageFactory(builder).getObject().createEntityManager();
    }

    @Primary
    @Bean(name = "entityManageFactoryPrimary")
    public LocalContainerEntityManagerFactoryBean entityManageFactory(EntityManagerFactoryBuilder builder){
        LocalContainerEntityManagerFactoryBean entityManagerFactory =  builder.dataSource(mysqlDataSource)
                .packages(PathEnum.corePath+".entity.system")//PathEnum自定义的路径枚举类
                .persistenceUnit("primaryPersistenceUnit")  //使用持久化单元配置 
                .build();
        return entityManagerFactory;
    }

    @Primary
    @Bean(name = "transactionManagerPrimary")
    public PlatformTransactionManager transactionManager(EntityManagerFactoryBuilder builder) {
        return new JpaTransactionManager(entityManageFactory(builder).getObject());
    }

}

配置完成,启动项目可以发现成功创建entityManagerFactory和entityManager。

Building JPA container EntityManagerFactory for persistence unit 'primaryPersistenceUnit'
Initialized JPA EntityManagerFactory for persistence unit 'primaryPersistenceUnit'

c.配置多源数据库

同样的道理,一个数据源配置一个。

@Configuration
public class DataSourceConfig {

    @Bean(name = "mysqlDataSource")
    @Qualifier("mysqlDataSource")
    @Primary
    @ConfigurationProperties(prefix="spring.mysqldatasource")
    public DataSource getMyDataSource(){
        return DataSourceBuilder.create().build();
    }
    
    @Bean(name = "rdataSource")
    @Qualifier("rdataSource")
    @ConfigurationProperties(prefix="spring.datasource")
    public DataSource getOtherDataSource(){
        return DataSourceBuilder.create().build();
    }
    
}

而entityManageConfig也是同样分开,对应上相应的数据源即可。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lawliet1217

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值