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>
    (2)

4.使用@Scheduled创建定时任务
               不常用,容错机制没有,作为了解
                大公司使用专门的任务调度平台


猜你喜欢

转载自blog.csdn.net/Study_Live_Sun/article/details/80369478
今日推荐