mysql連接池druid + jedis連接池JedisPool 實現 “mysql+redis”終極操作數據庫

JedisPoolUtils

package cn.itcast.web.servlet;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * JedisPool工具類
 * 加載配置文件,配置連接池的參數
 * 提供獲取連接的方法
 */
public class JedisPoolUtils {

    private static JedisPool jedisPool;

    static {
        //讀取配置文件
        InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
        //創建Properties對象
        Properties pro = new Properties();
        //關聯文件
        try {
            pro.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //獲取數據,設置到JedisPoolConfig中
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
        config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));

        //初始化JedisPool
        jedisPool = new JedisPool(config, pro.getProperty("host"), Integer.parseInt(pro.getProperty("port")));
    }


    /**
     * 獲取連接方法
     */
    public static Jedis getJedis() {
        return jedisPool.getResource();
    }
}

JDBCUtils

package cn.itcast.web.servlet;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * JDBC工具類 使用Durid連接池
 */
public class JDBCUtils {

    private static DataSource ds ;

    static {

        try {
            //1.加載配置文件
            Properties pro = new Properties();
            //使用ClassLoader加載配置文件,獲取字節輸入流
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);

            //2.初始化連接池對象
            ds = DruidDataSourceFactory.createDataSource(pro);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 獲取連接池對象
     */
    public static DataSource getDataSource(){
        return ds;
    }


    /**
     * 獲取連接Connection對象
     */
    public static Connection getConnection() throws SQLException {
        return  ds.getConnection();
    }
}

dao

package cn.itcast.web.servlet;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.List;

public class ProvinceDaoImpl implements ProvinceDao {

    //1.聲明成員變量 jdbctemplement
    private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());

    @Override
    public List<Province> findAll() {
        //1.定義sql
        String sql = "select * from province ";
        //2.執行sql
        List<Province> list = template.query(sql, new BeanPropertyRowMapper<Province>(Province.class));
        return list;
    }
}

service

package cn.itcast.web.servlet;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import redis.clients.jedis.Jedis;

import java.util.List;

public class ProvinceServiceImpl implements ProvinceService {
    //聲明dao
    private ProvinceDao dao = new ProvinceDaoImpl();

    @Override
    public List<Province> findAll() {
        return dao.findAll();
    }

    /**
     * 使用redis緩存
     */

    @Override
    public String findAllJson() {
        //1.先從redis中查詢數據
        //1.1獲取redis客戶端連接
        Jedis jedis = JedisPoolUtils.getJedis();
        String province_json = jedis.get("province");

        //2判斷 province_json 數據是否爲null
        if (province_json == null || province_json.length() == 0) {
            //redis中沒有數據
            System.out.println("redis中沒數據,查詢數據庫...");
            //2.1從數據中查詢
            List<Province> ps = dao.findAll();
            //2.2將list序列化爲json
            ObjectMapper mapper = new ObjectMapper();
            try {
                province_json = mapper.writeValueAsString(ps);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }

            //2.3 將json數據存入redis
            jedis.set("province", province_json);
            //歸還連接
            jedis.close();

        } else {
            System.out.println("redis中有數據,查詢緩存...");
        }


        return province_json;
    }
}

druid.properties配置

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day23
username=root
password=jianan
initialSize=5
maxActive=10
maxWait=3000

jedis.properties配置

host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10

 

--------

測試

package cn.itcast.web.servlet;

public class Main {
    public static void main(String[] args) {
        ProvinceService provinceService = new ProvinceServiceImpl();
        String s = provinceService.findAllJson();
        System.out.println(s);
    }
}

redis中有數據,查詢緩存...
[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"廣州"},{"id":4,"name":"陝西"}]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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