From f16550ddee82be9fa4f42328083bd9c2b93e0114 Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Sun, 28 Jul 2024 23:12:08 +0800 Subject: [PATCH] =?UTF-8?q?:rocket:=20feat(=E6=96=B0=E5=A2=9E):=20?= =?UTF-8?q?=E6=9C=AA=E8=A7=A3=E5=86=B3=E9=85=8D=E5=90=88MyBatisPlus?= =?UTF-8?q?=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/service-utils/pom.xml | 17 ++-- .../service/config/MybatisPlusConfig.java | 23 ++++- .../service/config/RedisConfiguration.java | 98 ------------------- service/pom.xml | 12 --- .../src/main/resources/application-dev.yml | 6 -- .../src/main/resources/application-prod.yml | 5 - service/src/main/resources/application.yml | 62 ++++++++---- 7 files changed, 72 insertions(+), 151 deletions(-) delete mode 100644 common/service-utils/src/main/java/cn/bunny/common/service/config/RedisConfiguration.java diff --git a/common/service-utils/pom.xml b/common/service-utils/pom.xml index 23a0cf0..ddff80f 100644 --- a/common/service-utils/pom.xml +++ b/common/service-utils/pom.xml @@ -29,22 +29,17 @@ httpclient 4.5.14 - - - org.springframework.boot - spring-boot-starter-data-redis - - - - org.redisson - redisson - 3.26.1 - org.lionsoul ip2region 2.6.5 + + + org.apache.shardingsphere + shardingsphere-jdbc-core-spring-boot-starter + 5.2.0 + diff --git a/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java b/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java index 5b4b81b..617a519 100644 --- a/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java +++ b/common/service-utils/src/main/java/cn/bunny/common/service/config/MybatisPlusConfig.java @@ -6,8 +6,14 @@ import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerIntercep import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.shardingsphere.driver.jdbc.core.datasource.ShardingSphereDataSource; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; /** @@ -17,6 +23,9 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration @Slf4j public class MybatisPlusConfig { + @Autowired + private ShardingSphereDataSource dataSource; + @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { log.info("MybatisPlusInterceptor===>注入Mybatis-Plus配置..."); @@ -33,5 +42,17 @@ public class MybatisPlusConfig { return interceptor; } - + + @Bean + public SqlSessionFactory sqlSessionFactory() throws Exception { + SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); + sqlSessionFactoryBean.setDataSource(dataSource); + // 可以设置MyBatis-Plus的配置,比如mapper.xml的位置等 + return sqlSessionFactoryBean.getObject(); + } + + @Bean + public PlatformTransactionManager transactionManager() { + return new DataSourceTransactionManager(dataSource); + } } diff --git a/common/service-utils/src/main/java/cn/bunny/common/service/config/RedisConfiguration.java b/common/service-utils/src/main/java/cn/bunny/common/service/config/RedisConfiguration.java deleted file mode 100644 index 1b5c8d7..0000000 --- a/common/service-utils/src/main/java/cn/bunny/common/service/config/RedisConfiguration.java +++ /dev/null @@ -1,98 +0,0 @@ -package cn.bunny.common.service.config; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; -import lombok.extern.slf4j.Slf4j; -import org.springframework.cache.CacheManager; -import org.springframework.context.annotation.Bean; -import org.springframework.data.redis.cache.RedisCacheConfiguration; -import org.springframework.data.redis.cache.RedisCacheManager; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; -import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; -import org.springframework.data.redis.serializer.RedisSerializationContext; -import org.springframework.data.redis.serializer.StringRedisSerializer; -import org.springframework.stereotype.Component; - -import java.time.Duration; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; - -/** - * 设置Redis序列化 - */ -@Component -@Slf4j -public class RedisConfiguration { - /** - * 使用StringRedisSerializer序列化为字符串 - */ - @Bean - public RedisTemplate redisTemplate(LettuceConnectionFactory connectionFactory) { - log.info("RedisConfiguration===>使用StringRedisSerializer序列化为字符串"); - - RedisTemplate redisTemplate = new RedisTemplate<>(); - redisTemplate.setConnectionFactory(connectionFactory); - // 设置key序列化为string - redisTemplate.setKeySerializer(new StringRedisSerializer()); - // 设置value序列化为JSON,使用GenericJackson2JsonRedisSerializer替换默认序列化 - redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); - redisTemplate.setHashKeySerializer(new StringRedisSerializer()); - redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); - - return redisTemplate; - } - - /** - * 解决cache(@Cacheable)把数据缓存到redis中的value是乱码问题 - */ - @Bean - @SuppressWarnings("all") - public CacheManager cacheManager(RedisConnectionFactory factory) { - log.info("RedisConfiguration===>解决cache(@Cacheable)把数据缓存到redis中的value是乱码问题"); - - // 配置序列化 - RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() - .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) - .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jsonRedisSerializer())) - .entryTtl(Duration.ofDays(30)); - - return RedisCacheManager.builder(factory).cacheDefaults(config).build(); - } - - /** - * 指定的日期模式 - */ - public Jackson2JsonRedisSerializer jsonRedisSerializer() { - log.info("RedisConfiguration===>指定的日期模式"); - - ObjectMapper mapper = new ObjectMapper(); - // 设置ObjectMapper访问权限 - mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); - // 记录序列化之后的数据类型,方便反序列化 - mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL); - // LocalDatetime序列化,默认不兼容jdk8日期序列化 - JavaTimeModule timeModule = new JavaTimeModule(); - timeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); - timeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); - - timeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - // 关闭默认的日期格式化方式,默认UTC日期格式 yyyy-MM-dd’T’HH:mm:ss.SSS - mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - mapper.registerModule(timeModule); - - return new Jackson2JsonRedisSerializer<>(mapper, Object.class); - } -} diff --git a/service/pom.xml b/service/pom.xml index c2b3a69..a5a14fb 100644 --- a/service/pom.xml +++ b/service/pom.xml @@ -55,18 +55,6 @@ org.aspectj aspectjweaver - - - org.apache.shardingsphere - shardingsphere-jdbc-core - 5.4.1 - - - org.apache.shardingsphere - shardingsphere-jdbc - 5.4.1 - pom - diff --git a/service/src/main/resources/application-dev.yml b/service/src/main/resources/application-dev.yml index fd3bc79..ae831dd 100644 --- a/service/src/main/resources/application-dev.yml +++ b/service/src/main/resources/application-dev.yml @@ -17,9 +17,3 @@ bunny: sqlData: db_user username: root password: "02120212" - - redis: - host: 1192.168.3.98 - port: 6379 - database: 3 - password: "123456" diff --git a/service/src/main/resources/application-prod.yml b/service/src/main/resources/application-prod.yml index fd3bc79..8320720 100644 --- a/service/src/main/resources/application-prod.yml +++ b/service/src/main/resources/application-prod.yml @@ -18,8 +18,3 @@ bunny: username: root password: "02120212" - redis: - host: 1192.168.3.98 - port: 6379 - database: 3 - password: "123456" diff --git a/service/src/main/resources/application.yml b/service/src/main/resources/application.yml index f590883..247fa9e 100644 --- a/service/src/main/resources/application.yml +++ b/service/src/main/resources/application.yml @@ -1,37 +1,63 @@ server: port: 8800 - spring: + main: + allow-bean-definition-overriding: true profiles: active: @profiles.active@ application: name: bunny-service - datasource: - driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver - url: jdbc:shardingsphere:classpath:static/shardingsphere.yaml - # type: com.zaxxer.hikari.HikariDataSource + # datasource: + # # driver-class-name: org.apache.shardingsphere.driver.ShardingSphereDriver + # # url: jdbc:shardingsphere:classpath:static/shardingsphere.yaml + # # type: com.zaxxer.hikari.HikariDataSource # driver-class-name: com.mysql.cj.jdbc.Driver # url: jdbc:mysql://${bunny.master.host}:${bunny.master.port}/${bunny.master.sqlData}?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true # username: ${bunny.master.username} # password: ${bunny.master.password} - - data: - redis: - host: ${bunny.redis.host} - port: ${bunny.redis.port} - database: ${bunny.redis.database} - password: ${bunny.redis.password} - lettuce: - pool: - max-active: 20 #最大连接数 - max-wait: -1 #最大阻塞等待时间(负数表示没限制) - max-idle: 5 #最大空闲 - min-idle: 0 #最小空闲 + shardingsphere: + datasource: + names: master, slave1, slave2 + master: + type: com.zaxxer.hikari.HikariDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + jdbc-url: jdbc:mysql://${bunny.master.host}:${bunny.master.port}/${bunny.master.sqlData}?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true + username: ${bunny.master.username} + password: ${bunny.master.password} + slave1: + type: com.zaxxer.hikari.HikariDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + jdbc-url: jdbc:mysql://${bunny.slave1.host}:${bunny.slave1.port}/${bunny.slave1.sqlData}?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true + username: ${bunny.slave1.username} + password: ${bunny.slave1.password} + slave2: + type: com.zaxxer.hikari.HikariDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + jdbc-url: jdbc:mysql://${bunny.slave2.host}:${bunny.slave2.port}/${bunny.slave2.sqlData}?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=true + username: ${bunny.slave2.username} + password: ${bunny.slave2.password} + rules: + readwrite-splitting: + data-sources: + readwrite_ds: + static-strategy: + write-data-source-name: master + read-data-source-names: slave1, slave2 + load-balancer-name: round_robin + load-balancers: + round_robin: + type: ROUND_ROBIN + sharding: + default-database-strategy: + hint: + sharding-algorithm-name: master + jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 + mybatis-plus: mapper-locations: classpath:mapper/*.xml configuration: