springboot学习第二天之事务,配置数据源,日志管理,定时任务
1.SpringBoot整合事务
spring事务分类(编程事务、声明事务(xml方式、注解事务))
注解事务:@Transactional
test01
test02
分布式事务进行管理jta+atomikos,不用配置事务管理, atomikos已经集合了事务管理
test01和test02数据库数据源事务注册第三方(atomikos)----两段提交协议,2pc-传统分布式事务
Atomikos 是一个为Java平台提供增值服务的并且开源类事务管理器。使用导依赖
2.配置数据源
方法一:通过classpath:jdbc.properties
package cn.itcast.springboot.javaconfig;
import javax.sql.DataSource;
import org.omg.CORBA.PRIVATE_MEMBER;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import com.jolbox.bonecp.BoneCPDataSource;
@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "cn.itcast.springboot.javaconfig") //配置扫描包
@PropertySource(value= {"classpath:jdbc.properties"},ignoreResourceNotFound = true)
public class SpringConfig {
@Value("${jdbc.url}")
private String jdbcUrl;
@Value("${jdbc.driverClassName}")
private String driverClassName;
@Value("${jdbc.username}")
private String jdbcUsername;
@Value("${jdbc.password}")
private String jdbcPassword;
@Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
public UserDAO getUserDAO(){
return new UserDAO(); // 直接new对象做演示
}
@Bean(destroyMethod = "close")
public DataSource boneCPDataSource(){
BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
//数据库驱动
boneCPDataSource.setDriverClass(driverClassName);
//相应驱动的jdbcURL
boneCPDataSource.setJdbcUrl(jdbcUrl);
//数据库的用户名
boneCPDataSource.setUsername(jdbcUsername);
//数据库的密码
boneCPDataSource.setPassword(jdbcPassword);
//检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消设置为0
boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);
//连接池中未使用的链接最大存活时间,单位是分,默认值60,如果要永远存活设置为0
boneCPDataSource.setIdleMaxAgeInMinutes(30);
//每个分区最大连接数
boneCPDataSource.setMaxConnectionsPerPartition(100);
//每个分区最小的连接数吧
boneCPDataSource.setMinConnectionsPerPartition(5);
return boneCPDataSource;
}
}
方法二:通过application.properties
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test1.url=jdbc:mysql://localhost:3306/springboot1?useUnicode=true&characterEncoding=utf-8
spring.datasource.test1.username=root
spring.datasource.test1.password=root
spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.test2.url=jdbc:mysql://localhost:3306/springboot2?useUnicode=true&characterEncoding=utf-8
spring.datasource.test2.username=root
spring.datasource.test2.password=root
spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver
方法三:自定义数据源
package com.soft.datasource;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
@Configuration//注册到spring容器中
@MapperScan(basePackages = "com.soft.test1",sqlSessionFactoryRef = "test1SqlSessionFactory")
//属于自定义数据源,将自定义的数据源注入容器
public class DataSourceConfigTest1 {
@Bean(name = "test1DataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource.test1")
public DataSource testDataSource(){
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "test1SqlSessionFactory")
public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource")DataSource dataSource)throws Exception{
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//mybatis配置文件
//bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test1/*.xml"));
return bean.getObject();
}
@Primary
//事务管理
@Bean(name = "test1TransactionManager")
public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource")DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Primary
@Bean(name = "test1SqlSessionTemplate")
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory")SqlSessionFactory sqlSessionFactory){
return new SqlSessionTemplate(sqlSessionFactory);
}
}
使用log4j.properties
在resources包下创建log4j.properties文件
在controller使用
3.使用AOP统一处理请求日志
(1)导入aop依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
4.使用@Scheduled创建定时任务
不常用,容错机制没有,作为了解
大公司使用专门的任务调度平台