上一篇已经讲过了如何搭建一个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也是同样分开,对应上相应的数据源即可。