第5.1.1 SpringBoot环境准备

1 druid连接池配置

import java.sql.SQLException;
import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import com.alibaba.druid.pool.DruidDataSource;


/**
 * Druid基础配置
 *
 */
@Configuration
public class DruidConfig {
     	private Logger logger = LoggerFactory.getLogger(DruidConfig.class);

        @Value("${spring.datasource.url}")
        private String dbUrl;
        
        @Value("${spring.datasource.username}")
	    private String username;

	    @Value("${spring.datasource.password}")
        private String password;
	
	    @Value("${spring.datasource.driverClassName}")
	    private String driverClassName;
	    
	    @Value("${spring.datasource.initialSize}")
	    private int initialSize;
	    
	    @Value("${spring.datasource.minIdle}")
	    private int minIdle;
	    
	    @Value("${spring.datasource.maxActive}")
	    private int maxActive;
	    
	    @Value("${spring.datasource.maxWait}")
	    private int maxWait;

	    @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
	    private int timeBetweenEvictionRunsMillis;

	    @Value("${spring.datasource.minEvictableIdleTimeMillis}")
	    private int minEvictableIdleTimeMillis;

	    @Value("${spring.datasource.validationQuery}")
	    private String validationQuery;

	    @Value("${spring.datasource.testWhileIdle}")
	    private boolean testWhileIdle;

	    @Value("${spring.datasource.testOnBorrow}")
	    private boolean testOnBorrow;

	    @Value("${spring.datasource.testOnReturn}")
	    private boolean testOnReturn;
	
	    @Value("${spring.datasource.poolPreparedStatements}")
	    private boolean poolPreparedStatements;

	    @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
	    private int maxPoolPreparedStatementPerConnectionSize;

	    @Value("${spring.datasource.filters}")
	    private String filters;

	    @Value("${spring.datasource.connectionProperties}")
	    private String connectionProperties;
	    
	    @Bean(name = "dataSource")
	    @Primary //在同样的DataSource中,首先使用被标注的DataSource
	    public DataSource dataSource() {
	    	DruidDataSource datasource = new DruidDataSource();
            datasource.setUrl(this.dbUrl);
            datasource.setUsername(username);
            datasource.setPassword(password);
            datasource.setDriverClassName(driverClassName);
            
            //configuration  
            datasource.setInitialSize(initialSize);
            datasource.setMinIdle(minIdle);
            datasource.setMaxActive(maxActive);
            datasource.setMaxWait(maxWait);
	        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
	        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
	        datasource.setValidationQuery(validationQuery);
            datasource.setTestWhileIdle(testWhileIdle);
	        datasource.setTestOnBorrow(testOnBorrow);
            datasource.setTestOnReturn(testOnReturn);
	        datasource.setPoolPreparedStatements(poolPreparedStatements);
            datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
            try {
               datasource.setFilters(filters);
            }catch (SQLException e) {
		       logger.error("druid configuration initialization filter", e);
		    } 
            datasource.setConnectionProperties(connectionProperties);
		    return datasource;
	    }
}

2 dubbo配置

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

/**
 * Dubbo基础配置
 *
 */
@Configuration
@ImportResource({"classpath*:dubbo/*.xml","classpath*:spring/spring-*-api.xml"})
public class DubboConfig {

}

3 mybatis配置
mybatis配置使用了两个类来完成,其中MyBatisMapperScannerConfig终于扫描注解配置

import javax.sql.DataSource;

import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;

import com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor;

/**
 * MyBatis基础配置
 *
 */
@Configuration
@ConditionalOnClass(DruidConfig.class)
@AutoConfigureAfter(DruidConfig.class)
@EnableTransactionManagement
public class MyBatisConfig implements TransactionManagementConfigurer {
	
	private Logger logger = LoggerFactory.getLogger(MyBatisConfig.class);

    @Autowired
    DataSource dataSource;

    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactoryBean() {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);

        //分页插件
        OffsetLimitInterceptor paginator = new OffsetLimitInterceptor();
        paginator.setDialectClass("com.github.miemiedev.mybatis.paginator.dialect.MySQLDialect");
        //添加插件
        bean.setPlugins(new Interceptor[]{paginator});
        
        //添加XML目录
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        try {
            bean.setMapperLocations(resolver.getResources("classpath*:com/dzmsoft/**/mapping/*.xml"));
            return bean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

    @Bean
    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
    	try{
           return new DataSourceTransactionManager(dataSource);
    	}catch(Exception e){
    		logger.error(e.getMessage(), e);
    		throw e;
    	}
    }
}
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * MyBatis扫描接口
 * 
 */
@Configuration
//TODO 注意,由于MapperScannerConfigurer执行的比较早,所以必须有下面的注解
@ConditionalOnClass(MyBatisConfig.class)
@AutoConfigureAfter(MyBatisConfig.class)
public class MyBatisMapperScannerConfig {

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.dzmsoft.**.dao");
        return mapperScannerConfigurer;
    }

}

4 jetty的支持

<dependency>  
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-starter-jetty</artifactId>
			<scope>provided</scope>
</dependency>

5 bootstrap.yml
springboot自身并不直接识别bootstrap.yml,需要加上下面的

<properties>
        <version.springboot>2.0.1.RELEASE</version.springboot>
    </properties>

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-context</artifactId>
            <version>${version.springboot}</version>
        </dependency>

为什么不加也可以呢,因为其他jar可能会引用到,这就是SpringBoot bootstrap 配置文件没有生效的原因
1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

warrah

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

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

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

打赏作者

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

抵扣说明:

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

余额充值