diff --git a/esua-epdc/epdc-commons/epdc-commons-mybatis/pom.xml b/esua-epdc/epdc-commons/epdc-commons-mybatis/pom.xml index 229e900f6..84b8051f9 100644 --- a/esua-epdc/epdc-commons/epdc-commons-mybatis/pom.xml +++ b/esua-epdc/epdc-commons/epdc-commons-mybatis/pom.xml @@ -65,6 +65,17 @@ org.postgresql postgresql + + + + com.alibaba.cloud + spring-cloud-alibaba-seata + + + io.seata + seata-all + + diff --git a/esua-epdc/epdc-commons/epdc-commons-mybatis/src/main/java/com/elink/esua/epdc/commons/mybatis/config/DataSourceConfig.java b/esua-epdc/epdc-commons/epdc-commons-mybatis/src/main/java/com/elink/esua/epdc/commons/mybatis/config/DataSourceConfig.java new file mode 100644 index 000000000..09958f30f --- /dev/null +++ b/esua-epdc/epdc-commons/epdc-commons-mybatis/src/main/java/com/elink/esua/epdc/commons/mybatis/config/DataSourceConfig.java @@ -0,0 +1,167 @@ +package com.elink.esua.epdc.commons.mybatis.config; + +import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer; +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties; +import com.baomidou.mybatisplus.autoconfigure.MybatisPlusPropertiesCustomizer; +import com.baomidou.mybatisplus.autoconfigure.SpringBootVFS; +import com.baomidou.mybatisplus.core.MybatisConfiguration; +import com.baomidou.mybatisplus.core.config.GlobalConfig; +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator; +import com.baomidou.mybatisplus.core.injector.ISqlInjector; +import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; +import io.seata.rm.datasource.DataSourceProxy; +import org.apache.ibatis.mapping.DatabaseIdProvider; +import org.apache.ibatis.plugin.Interceptor; +import org.apache.ibatis.session.SqlSessionFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import javax.sql.DataSource; +import java.util.Iterator; +import java.util.List; + +/** + * seata分布式事务数据源 + * + * @author rongchao + * @Date 19-8-21 + */ +@Configuration +@EnableConfigurationProperties({MybatisPlusProperties.class}) +public class DataSourceConfig implements InitializingBean { + + private final Logger logger = LoggerFactory.getLogger(getClass()); + + private final MybatisPlusProperties properties; + private final Interceptor[] interceptors; + private final ResourceLoader resourceLoader; + private final DatabaseIdProvider databaseIdProvider; + private final List configurationCustomizers; + private final List mybatisPlusPropertiesCustomizers; + private final ApplicationContext applicationContext; + + public DataSourceConfig(MybatisPlusProperties properties, ObjectProvider interceptorsProvider, ResourceLoader resourceLoader, ObjectProvider databaseIdProvider, ObjectProvider> configurationCustomizersProvider, ObjectProvider> mybatisPlusPropertiesCustomizerProvider, ApplicationContext applicationContext) { + this.properties = properties; + this.interceptors = (Interceptor[]) interceptorsProvider.getIfAvailable(); + this.resourceLoader = resourceLoader; + this.databaseIdProvider = (DatabaseIdProvider) databaseIdProvider.getIfAvailable(); + this.configurationCustomizers = (List) configurationCustomizersProvider.getIfAvailable(); + this.mybatisPlusPropertiesCustomizers = (List) mybatisPlusPropertiesCustomizerProvider.getIfAvailable(); + this.applicationContext = applicationContext; + } + + @Override + public void afterPropertiesSet() { + if (!CollectionUtils.isEmpty(this.mybatisPlusPropertiesCustomizers)) { + this.mybatisPlusPropertiesCustomizers.forEach((i) -> { + i.customize(this.properties); + }); + } + + this.checkConfigFileExists(); + } + + private void checkConfigFileExists() { + if (this.properties.isCheckConfigLocation() && StringUtils.hasText(this.properties.getConfigLocation())) { + Resource resource = this.resourceLoader.getResource(this.properties.getConfigLocation()); + Assert.state(resource.exists(), "Cannot find config location: " + resource + " (please add config file or check your Mybatis configuration)"); + } + + } + + @Bean + @ConditionalOnMissingBean + public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { + DataSourceProxy dataSourceProxy = new DataSourceProxy(dataSource); + MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean(); + factory.setDataSource(dataSourceProxy); + factory.setVfs(SpringBootVFS.class); + if (StringUtils.hasText(this.properties.getConfigLocation())) { + factory.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation())); + } + + this.applyConfiguration(factory); + if (this.properties.getConfigurationProperties() != null) { + factory.setConfigurationProperties(this.properties.getConfigurationProperties()); + } + + if (!ObjectUtils.isEmpty(this.interceptors)) { + factory.setPlugins(this.interceptors); + } + + if (this.databaseIdProvider != null) { + factory.setDatabaseIdProvider(this.databaseIdProvider); + } + + if (StringUtils.hasLength(this.properties.getTypeAliasesPackage())) { + factory.setTypeAliasesPackage(this.properties.getTypeAliasesPackage()); + } + + if (this.properties.getTypeAliasesSuperType() != null) { + factory.setTypeAliasesSuperType(this.properties.getTypeAliasesSuperType()); + } + + if (StringUtils.hasLength(this.properties.getTypeHandlersPackage())) { + factory.setTypeHandlersPackage(this.properties.getTypeHandlersPackage()); + } + + if (!ObjectUtils.isEmpty(this.properties.resolveMapperLocations())) { + factory.setMapperLocations(this.properties.resolveMapperLocations()); + } + + if (StringUtils.hasLength(this.properties.getTypeEnumsPackage())) { + factory.setTypeEnumsPackage(this.properties.getTypeEnumsPackage()); + } + + GlobalConfig globalConfig = this.properties.getGlobalConfig(); + if (this.applicationContext.getBeanNamesForType(MetaObjectHandler.class, false, false).length > 0) { + MetaObjectHandler metaObjectHandler = (MetaObjectHandler) this.applicationContext.getBean(MetaObjectHandler.class); + globalConfig.setMetaObjectHandler(metaObjectHandler); + } + + if (this.applicationContext.getBeanNamesForType(IKeyGenerator.class, false, false).length > 0) { + IKeyGenerator keyGenerator = (IKeyGenerator) this.applicationContext.getBean(IKeyGenerator.class); + globalConfig.getDbConfig().setKeyGenerator(keyGenerator); + } + + if (this.applicationContext.getBeanNamesForType(ISqlInjector.class, false, false).length > 0) { + ISqlInjector iSqlInjector = (ISqlInjector) this.applicationContext.getBean(ISqlInjector.class); + globalConfig.setSqlInjector(iSqlInjector); + } + + factory.setGlobalConfig(globalConfig); + return factory.getObject(); + } + + private void applyConfiguration(MybatisSqlSessionFactoryBean factory) { + MybatisConfiguration configuration = this.properties.getConfiguration(); + if (configuration == null && !StringUtils.hasText(this.properties.getConfigLocation())) { + configuration = new MybatisConfiguration(); + } + + if (configuration != null && !CollectionUtils.isEmpty(this.configurationCustomizers)) { + Iterator var3 = this.configurationCustomizers.iterator(); + + while (var3.hasNext()) { + ConfigurationCustomizer customizer = (ConfigurationCustomizer) var3.next(); + customizer.customize(configuration); + } + } + + factory.setConfiguration(configuration); + } +} diff --git a/esua-epdc/epdc-gateway/pom.xml b/esua-epdc/epdc-gateway/pom.xml index d3fbd473c..56b578458 100644 --- a/esua-epdc/epdc-gateway/pom.xml +++ b/esua-epdc/epdc-gateway/pom.xml @@ -68,6 +68,7 @@ 9094 + 2 47.104.224.45 6379 elink@888 diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/pom.xml b/esua-epdc/epdc-module/epdc-api/epdc-api-server/pom.xml index db13d4461..33d4e2d05 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/pom.xml +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/pom.xml @@ -42,17 +42,6 @@ ${spring.boot.admin.version} - - - com.alibaba.cloud - spring-cloud-alibaba-seata - - - io.seata - seata-all - - - com.alibaba.cloud diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/config/WebConfig.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/config/WebConfig.java index ba68370a2..89458d299 100644 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/config/WebConfig.java +++ b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/config/WebConfig.java @@ -8,10 +8,8 @@ package com.elink.esua.epdc.config; +import com.elink.esua.epdc.commons.tools.resolver.LoginUserHandlerMethodArgumentResolver; import com.elink.esua.epdc.interceptor.AuthorizationInterceptor; -import com.elink.esua.epdc.resolver.LoginUserHandlerMethodArgumentResolver; -import com.elink.esua.epdc.interceptor.AuthorizationInterceptor; -import com.elink.esua.epdc.resolver.LoginUserHandlerMethodArgumentResolver; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; diff --git a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/resolver/LoginUserHandlerMethodArgumentResolver.java b/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/resolver/LoginUserHandlerMethodArgumentResolver.java deleted file mode 100644 index e4d9c04bb..000000000 --- a/esua-epdc/epdc-module/epdc-api/epdc-api-server/src/main/java/com/elink/esua/epdc/resolver/LoginUserHandlerMethodArgumentResolver.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (c) 2018 人人开源 All rights reserved. - * - * https://www.renren.io - * - * 版权所有,侵权必究! - */ - -package com.elink.esua.epdc.resolver; - -import com.elink.esua.epdc.annotation.LoginUser; -import com.elink.esua.epdc.annotation.LoginUser; -import com.elink.esua.epdc.entity.UserEntity; -import com.elink.esua.epdc.interceptor.AuthorizationInterceptor; -import com.elink.esua.epdc.service.UserService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.core.MethodParameter; -import org.springframework.stereotype.Component; -import org.springframework.web.bind.support.WebDataBinderFactory; -import org.springframework.web.context.request.NativeWebRequest; -import org.springframework.web.context.request.RequestAttributes; -import org.springframework.web.method.support.HandlerMethodArgumentResolver; -import org.springframework.web.method.support.ModelAndViewContainer; - -/** - * 有@LoginUser注解的方法参数,注入当前登录用户 - * - * @author Mark sunlightcs@gmail.com - */ -@Component -public class LoginUserHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver { - @Autowired - private UserService userService; - - @Override - public boolean supportsParameter(MethodParameter parameter) { - return parameter.getParameterType().isAssignableFrom(UserEntity.class) && parameter.hasParameterAnnotation(LoginUser.class); - } - - @Override - public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer container, - NativeWebRequest request, WebDataBinderFactory factory) throws Exception { - //获取用户ID - Object object = request.getAttribute(AuthorizationInterceptor.USER_KEY, RequestAttributes.SCOPE_REQUEST); - if(object == null){ - return null; - } - - //获取用户信息 - UserEntity user = userService.getUserByUserId((Long)object); - - return user; - } -} diff --git a/esua-epdc/epdc-module/epdc-demo/epdc-demo-server/pom.xml b/esua-epdc/epdc-module/epdc-demo/epdc-demo-server/pom.xml index abca22391..8e83befcf 100644 --- a/esua-epdc/epdc-module/epdc-demo/epdc-demo-server/pom.xml +++ b/esua-epdc/epdc-module/epdc-demo/epdc-demo-server/pom.xml @@ -48,17 +48,6 @@ spring-cloud-starter-alibaba-nacos-discovery - - - - com.alibaba.cloud - spring-cloud-alibaba-seata - - - io.seata - seata-all - -