Intellij IDEA 搭建Spring Boot項目(三)配置事務和Redis緩衝

來源:互聯網
上載者:User
Intellij IDEA 搭建Spring Boot項目 –>配置事務和Redis緩衝

標籤(空格分隔): SpringBoot JAVA後台 一、開始配置事物

類似我們前一篇配置spring-dao的時候,我們可以看見在ssm中配置事物的時候是如下配置的

    //這個不需要我們在進行配置  因為當我們@Configuration的時候  會全package掃描的   <!-- 掃描service包下所有使用註解的類型 -->    <context:component-scan base-package="com.ruolan.o2o.service" />    <!-- 配置交易管理員 -->    <bean id="transactionManager"        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <!-- 注入資料庫連接池 -->        <property name="dataSource" ref="dataSource" />    </bean>    <!-- 配置基於註解的聲明式事務 -->    <tx:annotation-driven transaction-manager="transactionManager" />

因此我們需要建立一個TransactionManagementConfiguration類

@Configuration//首先使用註解@EnableTransactionManagement 開啟事務支援後//在Service方法上添加@Transactional就可以@EnableTransactionManagementpublic class TransactionManagementConfiguration implements TransactionManagementConfigurer {    @Autowired    //注入DataSourceConfiguration裡面的dataSource 通過createDataSource擷取    private DataSource dataSource;    /**     * 關於交易管理  需要返回PlatformTransactionManager     *     * @return PlatformTransactionManager     */    @Override    public PlatformTransactionManager annotationDrivenTransactionManager() {        return new DataSourceTransactionManager(dataSource);    }}
二、配置redis緩衝

我們下面的兩個類就是相關的redis緩衝工具類 JedisPoolWriper JedisUtil

在application.peoperties檔案中添加以下關於redis的相關配置

#redis緩衝的相關配置#hostredis.hostname=127.0.0.1#redis連接埠號碼  預設6379redis.port=6379redis.database=0redis.pool.maxActive=600redis.pool.maxIdle=300redis.pool.maxWait=3000redis.pool.testOnBorrow=true

類似資料連線池的建立,建立RedisConfiguration配置類

@Configurationpublic class RedisConfiguration {    @Value("${redis.hostname}")    private String hostname;    @Value("${redis.port}")    private int port;    @Value("${redis.database}")    private int database;    @Value("${redis.pool.maxActive}")    private int maxActive;    @Value("${redis.pool.maxIdle}")    private int maxIdle;    @Value("${redis.pool.maxWait}")    private long maxWait;    @Value("${redis.pool.testOnBorrow}")    private boolean testOnBorrow;    @Autowired    private JedisPoolConfig jedisPoolConfig;    @Autowired    private JedisPoolWriper jedisPoolWriper;    @Autowired    private JedisUtil jedisUtil;    @Bean(name = "jedisPoolConfig")    public JedisPoolConfig createJedisPoolConfig() {        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();        //控制一個pool可以分配的多少個jedis執行個體        jedisPoolConfig.setMaxTotal(maxActive);        //串連池中最多可閒置maxIdle個串連  這裡取值20        //表示即使沒有資料庫連接時候依然可以保持20個閒置串連  而不被清除 隨時處於待命狀態        jedisPoolConfig.setMaxIdle(maxIdle);        //最大等待時間:當沒有可以用的串連的時候  串連池等待串連被歸還的最大時間(以毫秒技術)  超過時間則拋出異常        jedisPoolConfig.setMaxWaitMillis(maxWait);        //在擷取串連的時候檢查有效性        jedisPoolConfig.setTestOnBorrow(testOnBorrow);        return jedisPoolConfig;    }    @Bean(name = "jedisPoolWriper")    public JedisPoolWriper createJedisPoolWriper() {        JedisPoolWriper jedisPoolWriper = new JedisPoolWriper(jedisPoolConfig, hostname, port);        return jedisPoolWriper;    }    /**     * 建立Redis工具類  封裝好Redis的串連以進行相關操作     *     * @return     */    @Bean(name = "jedisUtil")    public JedisUtil createJedisUtil() {        JedisUtil jedisUtil = new JedisUtil();        jedisUtil.setJedisPool(jedisPoolWriper);        return jedisUtil;    }    @Bean(name = "jedisKeys")    public JedisUtil.Keys createJedisKeys() {        JedisUtil.Keys jedisKeys = jedisUtil.new Keys();        return jedisKeys;    }    @Bean(name = "jedisStrings")    public JedisUtil.Strings createJedisStrings() {        JedisUtil.Strings jedisStrings = jedisUtil.new Strings();        return jedisStrings;    }    @Bean(name = "jedisLists")    public JedisUtil.Lists createJedisLists() {        JedisUtil.Lists jedisLists = jedisUtil.new Lists();        return jedisLists;    }    @Bean(name = "jedisSets")    public JedisUtil.Sets createJedisSets() {        JedisUtil.Sets jedisSets = jedisUtil.new Sets();        return jedisSets;    }    @Bean(name = "jedisHash")    public JedisUtil.Hash createJedisHash() {        JedisUtil.Hash jedisHash = jedisUtil.new Hash();        return jedisHash;    }}

上述兩個類(事務和Redis配置類)的目錄結構圖如下圖所示:

我們在service裡面這樣使用Redis緩衝,代碼如下:

 @Autowired    private JedisUtil.Strings jedisStrings;    // Redis的安裝和配置      啟動之後再來運行這個是可以的  也就是走緩衝了    //    https://www.jianshu.com/p/6b5eca8d908b    @Autowired    private JedisUtil.Keys jedisKeys;    @Autowired    private AreaDao areaDao;    private static String AREALISTKEY = "arealist";    @Override    public List<Area> getAreaList() throws IOException {        String key = AREALISTKEY;        List<Area> areaList = null;        ObjectMapper mapper = new ObjectMapper();        //判斷是否有緩衝        if (!jedisKeys.exists(key)) {            //沒喲緩衝  則查詢資料庫            areaList = areaDao.queryArea();            String jsonString = mapper.writeValueAsString(areaList);            jedisStrings.set(key, jsonString);        } else {            //有緩衝  這個時候從緩衝中通過key擷取到緩衝的資料  然後轉換為我們需要的資料            String jsonString = jedisStrings.get(key);            JavaType javaType = mapper.getTypeFactory()                    .constructParametricType(ArrayList.class, Area.class);            areaList = mapper.readValue(jsonString, javaType);        }        return areaList;    }
測試service
//測試類別加入如下的兩個註解@RunWith(SpringRunner.class)@SpringBootTestpublic class AreaServiceTest {    @Autowired    private AreaService areaService;    // Redis的安裝和配置      啟動之後再來運行這個是可以的  也就是走緩衝了    //    https://www.jianshu.com/p/6b5eca8d908b    @Test    public void testGetAreaList() throws IOException {        List<Area> areaList = areaService.getAreaList();        System.out.println("查詢出來的地區集合的個數是:" + areaList.size());    }}

我們看下輸入的結果:

三、遇到的bug

剛開始沒瞭解redis是什麼,只是感覺是是一個緩衝,並沒想到需要各種配置–>導致沒有沒有開啟redis–server,在測試的時候會報
Could not get a resource from the pool的錯誤,在配置好redis的相關之後並啟動之後再次運行時可以正常啟動並執行。 springboot測試專案地址 https://github.com/wuyinlei/springtest https://github.com/wuyinlei/springtest https://github.com/wuyinlei/springtest 相關連結文章 Mac環境下安裝Redis

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.