intellij配置maven+SSM+redis(二)

至此springMVC已經配置完畢了,由於項目中需要使用mybatis,所以需要spring來集成mybatis,可以獲取一定的好處。

首先來看一下我們正常流程使用mybatis訪問數據庫時,

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
SqlSession session = factory.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);

其中UserMapper是包含了mybatis實現和定義的接口,在後面會進行講解,但是可以顯而易見的是,每次訪問數據庫的時候,我們都需要建立一個SqlSession,當大量的訪問的時候,內存中會存在大量的連接,導致響應時間長,甚至宕機的情況發生,所以使用spring來集成mybatis的一個好處是,不必再手動管理數據庫連接,而交由spring管理,可以專注於業務邏輯的實現。

集成方法,首先建立一個db.properties放入resources目錄下,可以通過classpath進行訪問資源目錄,用於配置數據庫的細節。

db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/jx?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull 
jdbc.username=root
jdbc.password=root

還需要一個sqlMapConfig來配置所有的mapper的掃描基礎包,之前建立的mapper包需要一個xml來掃描。

sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <properties resource="db.properties"></properties>

    <!-- 配置別名 -->
    <typeAliases>
        <!-- 批量掃描別名 -->
        <package name="com.neusoft.model"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <package name="com.neusoft.mapper"></package>

    </mappers>
</configuration>

配置好mybatis後,我們就要在ModuleConfig中配置spring來集成mybatis,其餘組件的集成也是在這個文件中,如redis,mq等,也就是讀取配置文件。

,在mvcConfig.java中已經讀取了sqlMapConfig.xml,所以直接在資源目錄下建立即可。
ModuleConfig.java
@Configuration
@EnableCaching
@EnableTransactionManagement()
@ComponentScan(basePackages = {"com.neusoft.service"})
public class ModuleConfig {

    @Bean
    public PropertyPlaceholderConfigurer propertyPlaceholderConfigurer(
            @Value("classpath:db.properties") Resource locationDB,
            @Value("classpath:redis.properties") Resource  locationsRedis) {
        PropertyPlaceholderConfigurer propertyPlaceholderConfigurer = new PropertyPlaceholderConfigurer();
        propertyPlaceholderConfigurer.setLocations(locationDB, locationsRedis);
        return propertyPlaceholderConfigurer;
    }

    @Bean
    public DataSource dataSource(@Value("${jdbc.username}") String userName,
                                 @Value("${jdbc.password}") String password,
                                 @Value("${jdbc.driver}") String driverClassName,
                                 @Value("${jdbc.url}") String jdbcUrl) {
        HikariDataSource dataSource=new HikariDataSource();
        // BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUsername(userName);
        dataSource.setPassword(password);
        dataSource.setDriverClassName(driverClassName);
        dataSource.setJdbcUrl(jdbcUrl);
        return dataSource;
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource);
        return sqlSessionFactory.getObject();
    }

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("com.neusoft.mapper");
        return mapperScannerConfigurer;
    }
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);
        return transactionManager;
    }

    //redis配置參考http://www.cnblogs.com/s648667069/p/6473412.html
    //jedis連接池 配置
    @Bean
    public JedisPoolConfig poolConfig(@Value("${redis.maxIdle}") int maxIdle,
                                      @Value("${redis.maxWait}") int maxWaitMillis,
                                      @Value("${redis.testOnBorrow}") Boolean testOnBorrow) {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(maxIdle);
        jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
        jedisPoolConfig.setTestOnBorrow(testOnBorrow);
        return jedisPoolConfig;
    }

    // redis服務器中心
    @Bean
    public JedisConnectionFactory connectionFactory(@Value("#{poolConfig}") JedisPoolConfig poolConfig , @Value("${redis.host}") String hostName,
                                                    @Value("${redis.port}") int port, @Value("${redis.maxWait}") int timeout, @Value("${redis.password}") String password) {
        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
        jedisConnectionFactory.setPoolConfig(poolConfig);
        jedisConnectionFactory.setHostName(hostName);
        jedisConnectionFactory.setPort(port);
        jedisConnectionFactory.setPassword(password);
        jedisConnectionFactory.setTimeout(timeout);
        return jedisConnectionFactory;
    }
    // redis template
    @Bean
    public RedisTemplate redisTemplate(@Value("#{connectionFactory}") JedisConnectionFactory connectionFactory) {
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(connectionFactory);
        StringRedisSerializer keySerializer=new StringRedisSerializer();
        redisTemplate.setKeySerializer(keySerializer);
        JdkSerializationRedisSerializer jdkSerializationRedisSerializer=new JdkSerializationRedisSerializer();
        redisTemplate.setValueSerializer(jdkSerializationRedisSerializer);
        return redisTemplate;
    }

    // cache manager
    @Bean()
    public RedisCacheManager cacheManager(@Value("#{redisTemplate}") RedisTemplate redisTemplate) {
        RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate);
        return redisCacheManager;
    }
}

首先我們需要一個數據源,通過數據源來訪問數據庫,比較穩定,速度比較快的數據源是HikariDataSource,在Pom.xml已經引入了jar包,也可使用比較普遍的BasicDataSource。

數據源同樣需要配置driver,url,username,password,配置完後把數據源放入sqlSessionFactory中,並把這個函數設爲一個Bean即可。

在之前使用myBatis的方法中,每次訪問數據庫就需要實例化一個sqlSessionFactory,而交由數據源管理後,不必如此。


在下面配置的是redis,redis是一個鍵值對數據庫,使用的時候數據是保存在內存中的,讀取速度快,所以通常用於存儲一個同樣參數返回同樣結果的東西,比如搜索結果,當搜索同一個關鍵字時,返回的結果查詢過程不必再次執行,直接從數據庫返回執行結果即可,減輕運算壓力,當涉及到的數據庫變化時,比如添加數據,則需要清除redis的數據庫內容,重新運算,這是不可避免的。具體配置過程也是在resources目錄下創建redis.properties。

redis.properties
# Redis settings 
redis.host=127.0.0.1
redis.port=6379 
redis.password=123q456w
redis.maxIdle=300 
redis.maxActive=600 
redis.maxWait=1000 
redis.testOnBorrow=true
 

redis在小項目中可有可無,也可以不添加此功能。


到此我們需要的基礎配置都已經完成,下面將編寫一個登錄註冊功能的“麻雀”,也可以在github上面下載我的示例。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章