Merge pull request #536 from wcc1433/main

多环境导入相同 Mapper 冲突问题
This commit is contained in:
Michael Yang 2025-07-13 09:17:30 +08:00 committed by GitHub
commit 37afc9ca5b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -43,7 +43,7 @@ public class Mappers {
private Mappers() { private Mappers() {
} }
private static final Map<Class<?>, Object> MAPPER_OBJECTS = new ConcurrentHashMap<>(); private static final Map<String, Map<Class<?>, Object>> MAPPER_OBJECTS_OF_ENV = new ConcurrentHashMap<>();
private static final Map<Class<?>, Class<?>> ENTITY_MAPPER_MAP = new ConcurrentHashMap<>(); private static final Map<Class<?>, Class<?>> ENTITY_MAPPER_MAP = new ConcurrentHashMap<>();
@ -79,14 +79,16 @@ public class Mappers {
* @return {@link BaseMapper} 对象 * @return {@link BaseMapper} 对象
*/ */
public static <M> M ofMapperClass(Class<M> mapperClass) { public static <M> M ofMapperClass(Class<M> mapperClass) {
Object mapperObject = MapUtil.computeIfAbsent(MAPPER_OBJECTS, mapperClass, clazz -> Map<Class<?>, Object> mapperObjects = MapUtil.computeIfAbsent(MAPPER_OBJECTS_OF_ENV, "default", envId -> new ConcurrentHashMap<>());
Object mapperObject = MapUtil.computeIfAbsent(mapperObjects, mapperClass, clazz ->
Proxy.newProxyInstance(mapperClass.getClassLoader() Proxy.newProxyInstance(mapperClass.getClassLoader()
, new Class[]{mapperClass} , new Class[]{mapperClass}
, new MapperHandler(mapperClass))); , new MapperHandler(mapperClass)));
return (M) mapperObject; return (M) mapperObject;
} }
public static <M> M ofMapperClass(String environmentId, Class<M> mapperClass) { public static <M> M ofMapperClass(String environmentId, Class<M> mapperClass) {
Object mapperObject = MapUtil.computeIfAbsent(MAPPER_OBJECTS, mapperClass, clazz -> Map<Class<?>, Object> mapperObjects = MapUtil.computeIfAbsent(MAPPER_OBJECTS_OF_ENV, environmentId, envId -> new ConcurrentHashMap<>());
Object mapperObject = MapUtil.computeIfAbsent(mapperObjects, mapperClass, clazz ->
Proxy.newProxyInstance(mapperClass.getClassLoader() Proxy.newProxyInstance(mapperClass.getClassLoader()
, new Class[]{mapperClass} , new Class[]{mapperClass}
, new MapperHandler(environmentId, mapperClass))); , new MapperHandler(environmentId, mapperClass)));