Spring和Hibernate动态建表及动态加载映射文件(无需Session factory Rebuild)

Spring与Hibernate动态建表
本文介绍了一种在Spring和Hibernate环境下实现动态建表的方法,通过扩展Hibernate的SessionFactory类,实现实时更新数据库表结构及映射文件的功能,无需重建SessionFactory。
Spring与Hibernate动态建表及动态加载映射文件(无需SessionFactory Rebuild)



J.Office2有一功能是工作流支持动态表单设计,设计后可以动态生成数据库表,并且支持实时查询(单表及多表均可)。



由于J.Office2版本中采用了Hibernate作为底层的ORM框架,结合Spring框架,Spring容器启动后,SessionFactory就会被注入到各个业务的Dao层中去。



动态建表功能比较容易实现,我们可以new一个SessionFactory,然后把它的配置属性hibernate.hbm2ddl.auto改为update或create,就可以达到动态修改表结构的效果。



但若要加入新的hbm或class,需要重新调用SessionFactoryBean来获取一个全新的SessionFactory,这种方案试过了,效果并不理想。重新加载,会导致大量的hbm或class文件重新加载,实在有点慢。并且严重影响现在注入SessionFactory的Dao。若Dao采用动态构建SessionFactory,性能又是一问题。而Hibernate没有提供SessionFactory动态加入hbm或Class文件。所以实在无计可施。



所以最终还是回到如何扩展Hibernate的SessionFactory类中去了,这想法已经有不少开发人员尝试过,JE也有一帖子专门讨论这个。不过仅是一Demo,不完善。我们提供了两个扩展的类(修改Hibernate中的两类,使其支持动态加入配置文件,并且能实时查询。



我们仅需要修改两个类,一个是Configuration,在其里面加一方法,如下:

public void doComplie(){
secondPassCompile();
}



修改



在SessonFactoryImpl类中加入以下方法,(有一些变量值不能修改的,请改为可修改)


Java代码 收藏代码

Java代码 收藏代码

//add by csx
public void addNewConfig(Configuration cfg){
log.info("add NewConfig.....");

Mapping mapping=this.configuration.getMapping();
this.filters.putAll( cfg.getFilterDefinitions() );
//Generators:
Iterator classes = cfg.getClassMappings();
while ( classes.hasNext() ) {
PersistentClass model = (PersistentClass) classes.next();

if ( !model.isInherited() ) {
IdentifierGenerator generator = model.getIdentifier().createIdentifierGenerator(
settings.getDialect(),
settings.getDefaultCatalogName(),
settings.getDefaultSchemaName(),
(RootClass) model
);
identifierGenerators.put( model.getEntityName(), generator );
}
}

///////////////////////////////////////////////////////////////////////
// Prepare persisters and link them up with their cache
// region/access-strategy

String cacheRegionPrefix = settings.getCacheRegionPrefix() == null ? "" : settings.getCacheRegionPrefix() + ".";

Map entityAccessStrategies = new HashMap();
Map tmpEntityPersisters=new HashMap();
Map tmpClassMetadata=new HashMap();


this.configuration.getClassMap().putAll(cfg.getClassMap());
classes = cfg.getClassMappings();

while ( classes.hasNext() ) {

PersistentClass model = (PersistentClass) classes.next();

model.prepareTemporaryTables( mapping, settings.getDialect() );
String cacheRegionName = cacheRegionPrefix + model.getRootClass().getCacheRegionName();

// cache region is defined by the root-class in the hierarchy...
EntityRegionAccessStrategy accessStrategy = ( EntityRegionAccessStrategy ) entityAccessStrategies.get( cacheRegionName );
if ( accessStrategy == null && settings.isSecondLevelCacheEnabled() ) {
AccessType accessType = AccessType.parse( model.getCacheConcurrencyStrategy() );
if ( accessType != null ) {

log.trace( "Building cache for entity data [" + model.getEntityName() + "]" );
EntityRegion entityRegion = settings.getRegionFactory().buildEntityRegion( cacheRegionName, properties, CacheDataDescriptionImpl.decode( model ) );
accessStrategy = entityRegion.buildAccessStrategy( accessType );
entityAccessStrategies.put( cacheRegionName, accessStrategy );
allCacheRegions.put( cacheRegionName, entityRegion );
}
}
EntityPersister cp = PersisterFactory.createClassPersister( model, accessStrategy, this, cfg.getMapping() );
tmpEntityPersisters.put( model.getEntityName(), cp );
tmpClassMetadata.put( model.getEntityName(), cp.getClassMetadata() );

}

//Named Queries:
namedQueries.putAll(cfg.getNamedQueries());
namedSqlQueries.putAll( cfg.getNamedSQLQueries() );
sqlResultSetMappings.putAll(cfg.getSqlResultSetMappings());
imports.putAll(cfg.getImports());

entityPersisters.putAll(tmpEntityPersisters);

classMetadata.putAll(tmpClassMetadata);

Map tmpEntityToCollectionRoleMap = new HashMap();
Map tempCollectionPersisters=new HashMap();

this.configuration.getCollectionMap().putAll(cfg.getCollectionMap());
Iterator collections = cfg.getCollectionMappings();

while ( collections.hasNext() ) {
Collection model = (Collection) collections.next();
final String cacheRegionName = cacheRegionPrefix + model.getCacheRegionName();
final AccessType accessType = AccessType.parse( model.getCacheConcurrencyStrategy() );
CollectionRegionAccessStrategy accessStrategy = null;
if ( accessType != null && settings.isSecondLevelCacheEnabled() ) {
log.trace( "Building cache for collection data [" + model.getRole() + "]" );
CollectionRegion collectionRegion = settings.getRegionFactory().buildCollectionRegion( cacheRegionName, properties, CacheDataDescriptionImpl.decode( model ) );
accessStrategy = collectionRegion.buildAccessStrategy( accessType );
entityAccessStrategies.put( cacheRegionName, accessStrategy );
allCacheRegions.put( cacheRegionName, collectionRegion );
}
CollectionPersister persister = PersisterFactory.createCollectionPersister(this.getConfiguration(), model, accessStrategy, this) ;
tempCollectionPersisters.put( model.getRole(), persister.getCollectionMetadata() );
Type indexType = persister.getIndexType();
if ( indexType != null && indexType.isAssociationType() && !indexType.isAnyType() ) {
String entityName = ( ( AssociationType ) indexType ).getAssociatedEntityName( this );
Set roles = ( Set ) tmpEntityToCollectionRoleMap.get( entityName );
if ( roles == null ) {
roles = new HashSet();
tmpEntityToCollectionRoleMap.put( entityName, roles );
}
roles.add( persister.getRole() );
}
Type elementType = persister.getElementType();
if ( elementType.isAssociationType() && !elementType.isAnyType() ) {
String entityName = ( ( AssociationType ) elementType ).getAssociatedEntityName( this );
Set roles = ( Set ) tmpEntityToCollectionRoleMap.get( entityName );
if ( roles == null ) {
roles = new HashSet();
tmpEntityToCollectionRoleMap.put( entityName, roles );
}
roles.add( persister.getRole() );
}

}
//加入新的
collectionPersisters.putAll(tempCollectionPersisters);

Iterator itr = tmpEntityToCollectionRoleMap.entrySet().iterator();
while ( itr.hasNext() ) {
final Map.Entry entry = ( Map.Entry ) itr.next();
entry.setValue( Collections.unmodifiableSet( ( Set ) entry.getValue() ) );
}

collectionRolesByEntityParticipant.putAll( tmpEntityToCollectionRoleMap);

// after *all* persisters and named queries are registered
Iterator iter = tmpEntityPersisters.values().iterator();
while ( iter.hasNext() ) {
( (EntityPersister) iter.next() ).postInstantiate();
}
iter = tempCollectionPersisters.values().iterator();
while ( iter.hasNext() ) {
( (CollectionPersister) iter.next() ).postInstantiate();
}

queryPlanCache=new QueryPlanCache(this);


}



我们动态加入实体,动态可进行查询,Hibernate提供几种实体的查询策略,其中一个是我们常用的pojo,若采用该方法,我们得加上hbm与 class类或仅是含注解的class至hibernate的SessionFactory,这种方案并且没有问题,但会遇到当我们修改表单字段,重新生 成对应的实体时,我们就会遇到原有的实体class不能在ClassLoader里卸载。使用的还是旧的Class,达不到动态查询的效果。若使用动态的 ClassLoader,代码将变得很复杂。(尝试过,代码相对比较繁杂)



还好Hibernate提供了另一种实体查询策略,基于Map的动态实体。基于这种方式,我们配置一个一对多的表,其示例代码如下:



MainEntity.hbm.xml
Java代码 收藏代码

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class table="main_entity" entity-name="MainEntity">
<id name="mainId" column="mainId" type="java.lang.Long">
<generator class="native"/>
</id>
<property name="itemSubject" type="java.lang.String" length="128"/>
<property name="itemDescp" type="java.lang.String" />
<property name="createtime" type="java.util.Date" />
<bag name="subEntitys"
table="sub_entity"
lazy="false"
inverse="true"
cascade="save-update,delete-orphan"
>
<key>
<column name="mainId"/>
</key>
<one-to-many entity-name="SubEntity"/>
</bag>
</class>
</hibernate-mapping>

SubEntity.hbm.xml




Java代码 收藏代码

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class table="sub_entity" entity-name="SubEntity">
<id name="subId" column="subId" type="java.lang.Long">
<generator class="native"/>
</id>
<property name="subject" type="java.lang.String" length="128"/>
<property name="createtime" type="java.util.Date"/>
<many-to-one name="mainEntity" entity-name="MainEntity" not-null="false" fetch="select">
<column name="mainId"></column>
</many-to-one>
</class>
</hibernate-mapping>



为两实体插入数据后,可动态测试如下:




Java代码 收藏代码

public static void main(String[]args){
ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("classpath:app-context.xml");

MyAnnotationSessionFactoryBean sessionFactoryBean=(MyAnnotationSessionFactoryBean)ctx.getBean("&sessionFactory");

SessionFactoryImpl sessionFactoryImpl=(SessionFactoryImpl)sessionFactoryBean.getObject();

Configuration cfg=new Configuration();
//cfg.configure();

cfg.addFile("D:/download/eclipse/workspace2/SpringHibernate/src/com/hotent/entity/MainEntity.hbm.xml");
cfg.addFile("D:/download/eclipse/workspace2/SpringHibernate/src/com/hotent/entity/SubEntity.hbm.xml");
cfg.doComplie();

sessionFactoryImpl.addNewConfig(cfg);

MainEntityDao dao=(MainEntityDao)ctx.getBean("mainEntityDao");

List list=dao.query();

for(int i=0;i<list.size();i++){
Map map=(Map)list.get(i);
Iterator it=map.keySet().iterator();
while(it.hasNext()){
//String key=(String)it.next();
Object key=it.next();
Object val=map.get(key);
System.out.println("--------------->key:"+key );
}
}

Configuration cfg2=new Configuration();
cfg2.addFile("D:/dev/product/SpringHibernate/src/com/hotent/entity/MainEntity2.hbm.xml");
cfg2.addFile("D:/dev/product/SpringHibernate/src/com/hotent/entity/SubEntity2.hbm.xml");
cfg2.doComplie();
sessionFactoryImpl.addNewConfig(cfg2);

List list2=dao.query();

for(int i=0;i<list2.size();i++){
Map map=(Map)list2.get(i);
Iterator it=map.keySet().iterator();
while(it.hasNext()){
//String key=(String)it.next();
Object key=it.next();
Object val=map.get(key);
System.out.println("key:"+key );
}
}

}


Java代码 收藏代码

MainEntity2.hbm.xml与SubEntity2.hbm.xml文件相对原来的文件增加了一些列或删除了一些列



执行后,可以实时看到不同的结果,并且不会影响现有的dao。
D:\Java\jdk-17.0.8\bin\java.exe -XX:TieredStopAtLevel=1 -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-Dmanagement.endpoints.jmx.exposure.include=*" -javaagent:C:\Users\Lenovo\Downloads\idea-2023.3.5.win免安装版\lib\idea_rt.jar=57636:C:\Users\Lenovo\Downloads\idea-2023.3.5.win免安装版\bin -Dfile.encoding=GBK -classpath D:\java\project\RuoYi-Cloud\ruoyi-modules\ruoyi-system\target\classes;C:\workspace\repo\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-discovery\2023.0.1.2\spring-cloud-starter-alibaba-nacos-discovery-2023.0.1.2.jar;C:\workspace\repo\com\alibaba\cloud\spring-cloud-alibaba-commons\2023.0.1.2\spring-cloud-alibaba-commons-2023.0.1.2.jar;C:\workspace\repo\com\alibaba\nacos\nacos-client\2.3.2\nacos-client-2.3.2.jar;C:\workspace\repo\com\alibaba\nacos\nacos-auth-plugin\2.3.2\nacos-auth-plugin-2.3.2.jar;C:\workspace\repo\com\alibaba\nacos\nacos-encryption-plugin\2.3.2\nacos-encryption-plugin-2.3.2.jar;C:\workspace\repo\commons-codec\commons-codec\1.16.1\commons-codec-1.16.1.jar;C:\workspace\repo\com\fasterxml\jackson\core\jackson-core\2.17.2\jackson-core-2.17.2.jar;C:\workspace\repo\com\fasterxml\jackson\core\jackson-databind\2.17.2\jackson-databind-2.17.2.jar;C:\workspace\repo\com\fasterxml\jackson\core\jackson-annotations\2.17.2\jackson-annotations-2.17.2.jar;C:\workspace\repo\org\apache\httpcomponents\httpasyncclient\4.1.5\httpasyncclient-4.1.5.jar;C:\workspace\repo\org\apache\httpcomponents\httpcore-nio\4.4.16\httpcore-nio-4.4.16.jar;C:\workspace\repo\org\apache\httpcomponents\httpclient\4.5.13\httpclient-4.5.13.jar;C:\workspace\repo\org\apache\httpcomponents\httpcore\4.4.16\httpcore-4.4.16.jar;C:\workspace\repo\io\prometheus\simpleclient\0.16.0\simpleclient-0.16.0.jar;C:\workspace\repo\io\prometheus\simpleclient_tracer_otel\0.16.0\simpleclient_tracer_otel-0.16.0.jar;C:\workspace\repo\io\prometheus\simpleclient_tracer_common\0.16.0\simpleclient_tracer_common-0.16.0.jar;C:\workspace\repo\io\prometheus\simpleclient_tracer_otel_agent\0.16.0\simpleclient_tracer_otel_agent-0.16.0.jar;C:\workspace\repo\org\yaml\snakeyaml\2.2\snakeyaml-2.2.jar;C:\workspace\repo\io\micrometer\micrometer-core\1.13.6\micrometer-core-1.13.6.jar;C:\workspace\repo\org\hdrhistogram\HdrHistogram\2.2.2\HdrHistogram-2.2.2.jar;C:\workspace\repo\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;C:\workspace\repo\com\alibaba\spring\spring-context-support\1.0.11\spring-context-support-1.0.11.jar;C:\workspace\repo\org\springframework\cloud\spring-cloud-commons\4.1.4\spring-cloud-commons-4.1.4.jar;C:\workspace\repo\org\springframework\security\spring-security-crypto\6.3.4\spring-security-crypto-6.3.4.jar;C:\workspace\repo\org\springframework\cloud\spring-cloud-context\4.1.4\spring-cloud-context-4.1.4.jar;C:\workspace\repo\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-config\2023.0.1.2\spring-cloud-starter-alibaba-nacos-config-2023.0.1.2.jar;C:\workspace\repo\org\slf4j\slf4j-api\2.0.16\slf4j-api-2.0.16.jar;C:\workspace\repo\jakarta\annotation\jakarta.annotation-api\2.1.1\jakarta.annotation-api-2.1.1.jar;C:\workspace\repo\com\alibaba\cloud\spring-cloud-starter-alibaba-sentinel\2023.0.1.2\spring-cloud-starter-alibaba-sentinel-2023.0.1.2.jar;C:\workspace\repo\com\alibaba\csp\sentinel-transport-simple-http\1.8.8\sentinel-transport-simple-http-1.8.8.jar;C:\workspace\repo\com\alibaba\csp\sentinel-transport-common\1.8.8\sentinel-transport-common-1.8.8.jar;C:\workspace\repo\com\alibaba\csp\sentinel-datasource-extension\1.8.8\sentinel-datasource-extension-1.8.8.jar;C:\workspace\repo\com\alibaba\fastjson\1.2.83_noneautotype\fastjson-1.2.83_noneautotype.jar;C:\workspace\repo\com\alibaba\csp\sentinel-annotation-aspectj\1.8.8\sentinel-annotation-aspectj-1.8.8.jar;C:\workspace\repo\com\alibaba\csp\sentinel-core\1.8.8\sentinel-core-1.8.8.jar;C:\workspace\repo\org\aspectj\aspectjweaver\1.9.22.1\aspectjweaver-1.9.22.1.jar;C:\workspace\repo\com\alibaba\cloud\spring-cloud-circuitbreaker-sentinel\2023.0.1.2\spring-cloud-circuitbreaker-sentinel-2023.0.1.2.jar;C:\workspace\repo\com\alibaba\csp\sentinel-reactor-adapter\1.8.8\sentinel-reactor-adapter-1.8.8.jar;C:\workspace\repo\com\alibaba\csp\sentinel-spring-webflux-adapter\1.8.8\sentinel-spring-webflux-adapter-1.8.8.jar;C:\workspace\repo\com\alibaba\csp\sentinel-spring-webmvc-v6x-adapter\1.8.8\sentinel-spring-webmvc-v6x-adapter-1.8.8.jar;C:\workspace\repo\com\alibaba\csp\sentinel-web-adapter-common\1.8.8\sentinel-web-adapter-common-1.8.8.jar;C:\workspace\repo\com\alibaba\csp\sentinel-parameter-flow-control\1.8.8\sentinel-parameter-flow-control-1.8.8.jar;C:\workspace\repo\com\googlecode\concurrentlinkedhashmap\concurrentlinkedhashmap-lru\1.4.2\concurrentlinkedhashmap-lru-1.4.2.jar;C:\workspace\repo\com\alibaba\csp\sentinel-cluster-server-default\1.8.8\sentinel-cluster-server-default-1.8.8.jar;C:\workspace\repo\com\alibaba\csp\sentinel-cluster-common-default\1.8.8\sentinel-cluster-common-default-1.8.8.jar;C:\workspace\repo\io\netty\netty-handler\4.1.114.Final\netty-handler-4.1.114.Final.jar;C:\workspace\repo\io\netty\netty-common\4.1.114.Final\netty-common-4.1.114.Final.jar;C:\workspace\repo\io\netty\netty-resolver\4.1.114.Final\netty-resolver-4.1.114.Final.jar;C:\workspace\repo\io\netty\netty-buffer\4.1.114.Final\netty-buffer-4.1.114.Final.jar;C:\workspace\repo\io\netty\netty-transport\4.1.114.Final\netty-transport-4.1.114.Final.jar;C:\workspace\repo\io\netty\netty-transport-native-unix-common\4.1.114.Final\netty-transport-native-unix-common-4.1.114.Final.jar;C:\workspace\repo\io\netty\netty-codec\4.1.114.Final\netty-codec-4.1.114.Final.jar;C:\workspace\repo\com\alibaba\csp\sentinel-cluster-client-default\1.8.8\sentinel-cluster-client-default-1.8.8.jar;C:\workspace\repo\com\alibaba\cloud\spring-cloud-alibaba-sentinel-datasource\2023.0.1.2\spring-cloud-alibaba-sentinel-datasource-2023.0.1.2.jar;C:\workspace\repo\org\springframework\boot\spring-boot-starter-actuator\3.3.5\spring-boot-starter-actuator-3.3.5.jar;C:\workspace\repo\org\springframework\boot\spring-boot-starter\3.3.5\spring-boot-starter-3.3.5.jar;C:\workspace\repo\org\springframework\boot\spring-boot\3.3.5\spring-boot-3.3.5.jar;C:\workspace\repo\org\springframework\spring-context\6.1.14\spring-context-6.1.14.jar;C:\workspace\repo\org\springframework\boot\spring-boot-autoconfigure\3.3.5\spring-boot-autoconfigure-3.3.5.jar;C:\workspace\repo\org\springframework\boot\spring-boot-starter-logging\3.3.5\spring-boot-starter-logging-3.3.5.jar;C:\workspace\repo\ch\qos\logback\logback-classic\1.5.11\logback-classic-1.5.11.jar;C:\workspace\repo\ch\qos\logback\logback-core\1.5.11\logback-core-1.5.11.jar;C:\workspace\repo\org\apache\logging\log4j\log4j-to-slf4j\2.23.1\log4j-to-slf4j-2.23.1.jar;C:\workspace\repo\org\apache\logging\log4j\log4j-api\2.23.1\log4j-api-2.23.1.jar;C:\workspace\repo\org\slf4j\jul-to-slf4j\2.0.16\jul-to-slf4j-2.0.16.jar;C:\workspace\repo\org\springframework\spring-core\6.1.14\spring-core-6.1.14.jar;C:\workspace\repo\org\springframework\spring-jcl\6.1.14\spring-jcl-6.1.14.jar;C:\workspace\repo\org\springframework\boot\spring-boot-actuator-autoconfigure\3.3.5\spring-boot-actuator-autoconfigure-3.3.5.jar;C:\workspace\repo\org\springframework\boot\spring-boot-actuator\3.3.5\spring-boot-actuator-3.3.5.jar;C:\workspace\repo\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.17.2\jackson-datatype-jsr310-2.17.2.jar;C:\workspace\repo\io\micrometer\micrometer-observation\1.13.6\micrometer-observation-1.13.6.jar;C:\workspace\repo\io\micrometer\micrometer-commons\1.13.6\micrometer-commons-1.13.6.jar;C:\workspace\repo\io\micrometer\micrometer-jakarta9\1.13.6\micrometer-jakarta9-1.13.6.jar;D:\java\project\RuoYi-Cloud\ruoyi-common\ruoyi-common-datasource\target\classes;C:\workspace\repo\com\alibaba\druid-spring-boot-3-starter\1.2.23\druid-spring-boot-3-starter-1.2.23.jar;C:\workspace\repo\com\alibaba\druid\1.2.23\druid-1.2.23.jar;C:\workspace\repo\com\baomidou\dynamic-datasource-spring-boot3-starter\4.3.1\dynamic-datasource-spring-boot3-starter-4.3.1.jar;C:\workspace\repo\com\baomidou\dynamic-datasource-spring-boot-common\4.3.1\dynamic-datasource-spring-boot-common-4.3.1.jar;C:\workspace\repo\com\baomidou\dynamic-datasource-spring\4.3.1\dynamic-datasource-spring-4.3.1.jar;C:\workspace\repo\com\baomidou\dynamic-datasource-creator\4.3.1\dynamic-datasource-creator-4.3.1.jar;C:\workspace\repo\org\springframework\spring-jdbc\6.1.14\spring-jdbc-6.1.14.jar;C:\workspace\repo\org\springframework\spring-tx\6.1.14\spring-tx-6.1.14.jar;C:\workspace\repo\org\springframework\boot\spring-boot-starter-aop\3.3.5\spring-boot-starter-aop-3.3.5.jar;C:\workspace\repo\com\mysql\mysql-connector-j\8.3.0\mysql-connector-j-8.3.0.jar;D:\java\project\RuoYi-Cloud\ruoyi-common\ruoyi-common-datascope\target\classes;D:\java\project\RuoYi-Cloud\ruoyi-common\ruoyi-common-security\target\classes;C:\workspace\repo\org\springframework\spring-webmvc\6.1.14\spring-webmvc-6.1.14.jar;C:\workspace\repo\org\springframework\spring-aop\6.1.14\spring-aop-6.1.14.jar;C:\workspace\repo\org\springframework\spring-beans\6.1.14\spring-beans-6.1.14.jar;C:\workspace\repo\org\springframework\spring-expression\6.1.14\spring-expression-6.1.14.jar;D:\java\project\RuoYi-Cloud\ruoyi-api\ruoyi-api-system\target\classes;D:\java\project\RuoYi-Cloud\ruoyi-common\ruoyi-common-core\target\classes;C:\workspace\repo\org\springframework\cloud\spring-cloud-starter-openfeign\4.1.3\spring-cloud-starter-openfeign-4.1.3.jar;C:\workspace\repo\org\springframework\cloud\spring-cloud-openfeign-core\4.1.3\spring-cloud-openfeign-core-4.1.3.jar;C:\workspace\repo\io\github\openfeign\form\feign-form-spring\3.8.0\feign-form-spring-3.8.0.jar;C:\workspace\repo\io\github\openfeign\form\feign-form\3.8.0\feign-form-3.8.0.jar;C:\workspace\repo\commons-fileupload\commons-fileupload\1.5\commons-fileupload-1.5.jar;C:\workspace\repo\io\github\openfeign\feign-core\13.3\feign-core-13.3.jar;C:\workspace\repo\io\github\openfeign\feign-slf4j\13.3\feign-slf4j-13.3.jar;C:\workspace\repo\org\springframework\cloud\spring-cloud-starter-loadbalancer\4.1.4\spring-cloud-starter-loadbalancer-4.1.4.jar;C:\workspace\repo\org\springframework\cloud\spring-cloud-loadbalancer\4.1.4\spring-cloud-loadbalancer-4.1.4.jar;C:\workspace\repo\io\projectreactor\addons\reactor-extra\3.5.2\reactor-extra-3.5.2.jar;C:\workspace\repo\org\springframework\boot\spring-boot-starter-cache\3.3.5\spring-boot-starter-cache-3.3.5.jar;C:\workspace\repo\com\stoyanr\evictor\1.0.0\evictor-1.0.0.jar;C:\workspace\repo\org\springframework\spring-context-support\6.1.14\spring-context-support-6.1.14.jar;C:\workspace\repo\com\alibaba\transmittable-thread-local\2.14.4\transmittable-thread-local-2.14.4.jar;C:\workspace\repo\com\github\pagehelper\pagehelper-spring-boot-starter\2.1.0\pagehelper-spring-boot-starter-2.1.0.jar;C:\workspace\repo\org\mybatis\spring\boot\mybatis-spring-boot-starter\2.3.2\mybatis-spring-boot-starter-2.3.2.jar;C:\workspace\repo\org\springframework\boot\spring-boot-starter-jdbc\3.3.5\spring-boot-starter-jdbc-3.3.5.jar;C:\workspace\repo\com\zaxxer\HikariCP\5.1.0\HikariCP-5.1.0.jar;C:\workspace\repo\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\2.3.2\mybatis-spring-boot-autoconfigure-2.3.2.jar;C:\workspace\repo\org\mybatis\mybatis\3.5.14\mybatis-3.5.14.jar;C:\workspace\repo\com\github\pagehelper\pagehelper-spring-boot-autoconfigure\2.1.0\pagehelper-spring-boot-autoconfigure-2.1.0.jar;C:\workspace\repo\com\github\pagehelper\pagehelper\6.1.0\pagehelper-6.1.0.jar;C:\workspace\repo\com\github\jsqlparser\jsqlparser\4.7\jsqlparser-4.7.jar;C:\workspace\repo\org\mybatis\mybatis-spring\3.0.3\mybatis-spring-3.0.3.jar;C:\workspace\repo\org\springframework\boot\spring-boot-starter-validation\3.3.5\spring-boot-starter-validation-3.3.5.jar;C:\workspace\repo\org\hibernate\validator\hibernate-validator\8.0.1.Final\hibernate-validator-8.0.1.Final.jar;C:\workspace\repo\org\jboss\logging\jboss-logging\3.5.3.Final\jboss-logging-3.5.3.Final.jar;C:\workspace\repo\com\fasterxml\classmate\1.7.0\classmate-1.7.0.jar;C:\workspace\repo\com\alibaba\fastjson2\fastjson2\2.0.57\fastjson2-2.0.57.jar;C:\workspace\repo\io\jsonwebtoken\jjwt\0.9.1\jjwt-0.9.1.jar;C:\workspace\repo\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;C:\workspace\repo\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;C:\workspace\repo\org\apache\commons\commons-lang3\3.14.0\commons-lang3-3.14.0.jar;C:\workspace\repo\commons-io\commons-io\2.19.0\commons-io-2.19.0.jar;C:\workspace\repo\org\apache\poi\poi-ooxml\4.1.2\poi-ooxml-4.1.2.jar;C:\workspace\repo\org\apache\poi\poi\4.1.2\poi-4.1.2.jar;C:\workspace\repo\org\apache\commons\commons-collections4\4.4\commons-collections4-4.4.jar;C:\workspace\repo\org\apache\commons\commons-math3\3.6.1\commons-math3-3.6.1.jar;C:\workspace\repo\com\zaxxer\SparseBitSet\1.2\SparseBitSet-1.2.jar;C:\workspace\repo\org\apache\poi\poi-ooxml-schemas\4.1.2\poi-ooxml-schemas-4.1.2.jar;C:\workspace\repo\org\apache\xmlbeans\xmlbeans\3.1.0\xmlbeans-3.1.0.jar;C:\workspace\repo\org\apache\commons\commons-compress\1.19\commons-compress-1.19.jar;C:\workspace\repo\com\github\virtuald\curvesapi\1.06\curvesapi-1.06.jar;C:\workspace\repo\jakarta\servlet\jakarta.servlet-api\6.0.0\jakarta.servlet-api-6.0.0.jar;D:\java\project\RuoYi-Cloud\ruoyi-common\ruoyi-common-redis\target\classes;C:\workspace\repo\org\springframework\boot\spring-boot-starter-data-redis\3.3.5\spring-boot-starter-data-redis-3.3.5.jar;C:\workspace\repo\io\lettuce\lettuce-core\6.3.2.RELEASE\lettuce-core-6.3.2.RELEASE.jar;C:\workspace\repo\io\projectreactor\reactor-core\3.6.11\reactor-core-3.6.11.jar;C:\workspace\repo\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;C:\workspace\repo\org\springframework\data\spring-data-redis\3.3.5\spring-data-redis-3.3.5.jar;C:\workspace\repo\org\springframework\data\spring-data-keyvalue\3.3.5\spring-data-keyvalue-3.3.5.jar;C:\workspace\repo\org\springframework\data\spring-data-commons\3.3.5\spring-data-commons-3.3.5.jar;C:\workspace\repo\org\springframework\spring-oxm\6.1.14\spring-oxm-6.1.14.jar;D:\java\project\RuoYi-Cloud\ruoyi-common\ruoyi-common-log\target\classes;D:\java\project\RuoYi-Cloud\ruoyi-common\ruoyi-common-swagger\target\classes;C:\workspace\repo\org\springframework\boot\spring-boot-starter-web\3.3.5\spring-boot-starter-web-3.3.5.jar;C:\workspace\repo\org\springframework\boot\spring-boot-starter-json\3.3.5\spring-boot-starter-json-3.3.5.jar;C:\workspace\repo\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.17.2\jackson-datatype-jdk8-2.17.2.jar;C:\workspace\repo\com\fasterxml\jackson\module\jackson-module-parameter-names\2.17.2\jackson-module-parameter-names-2.17.2.jar;C:\workspace\repo\org\springframework\boot\spring-boot-starter-tomcat\3.3.5\spring-boot-starter-tomcat-3.3.5.jar;C:\workspace\repo\org\apache\tomcat\embed\tomcat-embed-core\10.1.31\tomcat-embed-core-10.1.31.jar;C:\workspace\repo\org\apache\tomcat\embed\tomcat-embed-el\10.1.31\tomcat-embed-el-10.1.31.jar;C:\workspace\repo\org\apache\tomcat\embed\tomcat-embed-websocket\10.1.31\tomcat-embed-websocket-10.1.31.jar;C:\workspace\repo\org\springframework\spring-web\6.1.14\spring-web-6.1.14.jar;C:\workspace\repo\org\springdoc\springdoc-openapi-starter-webmvc-ui\2.6.0\springdoc-openapi-starter-webmvc-ui-2.6.0.jar;C:\workspace\repo\org\springdoc\springdoc-openapi-starter-webmvc-api\2.6.0\springdoc-openapi-starter-webmvc-api-2.6.0.jar;C:\workspace\repo\org\springdoc\springdoc-openapi-starter-common\2.6.0\springdoc-openapi-starter-common-2.6.0.jar;C:\workspace\repo\io\swagger\core\v3\swagger-core-jakarta\2.2.22\swagger-core-jakarta-2.2.22.jar;C:\workspace\repo\io\swagger\core\v3\swagger-annotations-jakarta\2.2.22\swagger-annotations-jakarta-2.2.22.jar;C:\workspace\repo\io\swagger\core\v3\swagger-models-jakarta\2.2.22\swagger-models-jakarta-2.2.22.jar;C:\workspace\repo\jakarta\xml\bind\jakarta.xml.bind-api\4.0.2\jakarta.xml.bind-api-4.0.2.jar;C:\workspace\repo\jakarta\activation\jakarta.activation-api\2.1.3\jakarta.activation-api-2.1.3.jar;C:\workspace\repo\jakarta\validation\jakarta.validation-api\3.0.2\jakarta.validation-api-3.0.2.jar;C:\workspace\repo\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.17.2\jackson-dataformat-yaml-2.17.2.jar;C:\workspace\repo\org\webjars\swagger-ui\5.17.14\swagger-ui-5.17.14.jar;C:\workspace\repo\org\springframework\cloud\spring-cloud-starter-bootstrap\4.1.4\spring-cloud-starter-bootstrap-4.1.4.jar;C:\workspace\repo\org\springframework\cloud\spring-cloud-starter\4.1.4\spring-cloud-starter-4.1.4.jar;C:\workspace\repo\org\springframework\security\spring-security-rsa\1.1.3\spring-security-rsa-1.1.3.jar;C:\workspace\repo\org\bouncycastle\bcprov-jdk18on\1.78\bcprov-jdk18on-1.78.jar com.ruoyi.system.RuoYiSystemApplication 15:54:06.696 [background-preinit] INFO o.h.v.i.util.Version - [<clinit>,21] - HV000001: Hibernate Validator 8.0.1.Final Spring Boot Version: 3.3.5 Spring Application Name: ruoyi-system _ _ (_) | | _ __ _ _ ___ _ _ _ ______ ___ _ _ ___ | |_ ___ _ __ ___ | '__|| | | | / _ \ | | | || ||______|/ __|| | | |/ __|| __| / _ \| '_ ` _ \ | | | |_| || (_) || |_| || | \__ \| |_| |\__ \| |_ | __/| | | | | | |_| \__,_| \___/ \__, ||_| |___/ \__, ||___/ \__| \___||_| |_| |_| __/ | __/ | |___/ |___/ 15:54:07.201 [main] INFO c.a.n.c.u.ParamUtil - [<clinit>,89] - [settings] [req-serv] nacos-server port:8848 15:54:07.202 [main] INFO c.a.n.c.u.ParamUtil - [<clinit>,92] - [settings] [http-client] connect timeout:1000 15:54:07.202 [main] INFO c.a.n.c.u.ParamUtil - [<clinit>,97] - PER_TASK_CONFIG_SIZE: 3000.0 15:54:07.204 [Thread-2] INFO c.a.n.c.a.r.i.CredentialWatcher - [loadCredentialFromEnv,189] - null No credential found 15:54:07.216 [main] INFO c.a.n.common.labels - [getLabels,48] - DefaultLabelsCollectorManager get labels..... 15:54:07.216 [main] INFO c.a.n.common.labels - [getLabels,62] - Process LabelsCollector with [name:defaultNacosLabelsCollector] 15:54:07.216 [main] INFO c.a.n.common.labels - [collectLabels,62] - default nacos collect properties raw labels: null 15:54:07.217 [main] INFO c.a.n.common.labels - [collectLabels,69] - default nacos collect properties labels: {} 15:54:07.217 [main] INFO c.a.n.common.labels - [collectLabels,72] - default nacos collect jvm raw labels: null 15:54:07.217 [main] INFO c.a.n.common.labels - [collectLabels,78] - default nacos collect jvm labels: {} 15:54:07.217 [main] INFO c.a.n.common.labels - [collectLabels,81] - default nacos collect env raw labels: null 15:54:07.217 [main] INFO c.a.n.common.labels - [collectLabels,89] - default nacos collect env labels: {} 15:54:07.217 [main] INFO c.a.n.common.labels - [getLabels,50] - DefaultLabelsCollectorManager get labels finished,labels :{} 15:54:07.221 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.impl.NacosClientAuthServiceImpl success. 15:54:07.221 [main] INFO c.a.n.p.a.s.c.ClientAuthPluginManager - [init,56] - [ClientAuthPluginManager] Load ClientAuthService com.alibaba.nacos.client.auth.ram.RamClientAuthServiceImpl success. 15:54:07.225 [main] INFO c.a.n.c.c.i.LocalConfigInfoProcessor - [<clinit>,65] - LOCAL_SNAPSHOT_PATH:C:\Users\Lenovo\nacos\config 15:54:07.227 [main] INFO c.a.n.c.r.client - [lambda$createClient$0,118] - [RpcClientFactory] create a new rpc client of e78bb449-da9c-46fb-9a97-d0eb4ab5bc52_config-0 15:54:07.238 [main] INFO c.a.n.c.r.client - [printIfInfoEnabled,63] - [e78bb449-da9c-46fb-9a97-d0eb4ab5bc52_config-0] Register server push request handler:com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient$$Lambda$641/0x000002b7d13aa828 15:54:07.239 [main] INFO c.a.n.c.r.client - [printIfInfoEnabled,63] - [e78bb449-da9c-46fb-9a97-d0eb4ab5bc52_config-0] Register server push request handler:com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient$$Lambda$642/0x000002b7d13aac48 15:54:07.239 [main] INFO c.a.n.c.r.client - [printIfInfoEnabled,63] - [e78bb449-da9c-46fb-9a97-d0eb4ab5bc52_config-0] Registry connection listener to current client:com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient$1 15:54:07.240 [main] INFO c.a.n.c.r.client - [printIfInfoEnabled,63] - [e78bb449-da9c-46fb-9a97-d0eb4ab5bc52_config-0] RpcClient init, ServerListFactory = com.alibaba.nacos.client.config.impl.ClientWorker$ConfigRpcTransportClient$2 15:54:07.244 [main] INFO c.a.n.c.r.client - [printIfInfoEnabled,63] - [e78bb449-da9c-46fb-9a97-d0eb4ab5bc52_config-0] Try to connect to server on start up, server: {serverIp = '192.168.5.163', server main port = 8848} 15:54:07.266 [main] INFO c.a.n.c.r.c.g.GrpcClient - [createNewManagedChannel,210] - grpc client connection server:192.168.5.163 ip,serverPort:9848,grpcTslConfig:{"sslProvider":"","enableTls":false,"mutualAuthEnable":false,"trustAll":false} 15:54:07.691 [main] INFO c.a.n.c.a.AbstractAbilityControlManager - [initAbilityTable,61] - Ready to get current node abilities... 15:54:07.693 [main] INFO c.a.n.c.a.AbstractAbilityControlManager - [initAbilityTable,89] - Ready to initialize current node abilities, support modes: [SDK_CLIENT] 15:54:07.693 [main] INFO c.a.n.c.a.AbstractAbilityControlManager - [initAbilityTable,94] - Initialize current abilities finish... 15:54:07.693 [main] INFO c.a.n.c.a.d.NacosAbilityManagerHolder - [initAbilityControlManager,85] - [AbilityControlManager] Successfully initialize AbilityControlManager 15:54:07.800 [main] INFO c.a.n.c.r.client - [printIfInfoEnabled,63] - [e78bb449-da9c-46fb-9a97-d0eb4ab5bc52_config-0] Success to connect to server [192.168.5.163:8848] on start up, connectionId = 1758614047630_172.17.0.1_48408 15:54:07.801 [com.alibaba.nacos.client.remote.worker.0] INFO c.a.n.c.r.client - [printIfInfoEnabled,63] - [e78bb449-da9c-46fb-9a97-d0eb4ab5bc52_config-0] Notify connected event to listeners. 15:54:07.801 [main] INFO c.a.n.c.r.client - [printIfInfoEnabled,63] - [e78bb449-da9c-46fb-9a97-d0eb4ab5bc52_config-0] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$ConnectResetRequestHandler 15:54:07.802 [com.alibaba.nacos.client.remote.worker.0] INFO c.a.n.c.c.i.ClientWorker - [onConnected,713] - [e78bb449-da9c-46fb-9a97-d0eb4ab5bc52_config-0] Connected,notify listen context... 15:54:07.802 [main] INFO c.a.n.c.r.client - [printIfInfoEnabled,63] - [e78bb449-da9c-46fb-9a97-d0eb4ab5bc52_config-0] Register server push request handler:com.alibaba.nacos.common.remote.client.RpcClient$$Lambda$661/0x000002b7d1530668 15:54:07.830 [main] INFO c.a.n.c.c.i.Limiter - [<clinit>,55] - limitTime:5.0 15:54:07.846 [main] WARN c.a.c.n.c.NacosPropertySourceBuilder - [loadNacosData,97] - Ignore the empty nacos configuration and get it based on dataId[application-dev.yaml] & group[DEFAULT_GROUP] 15:54:07.852 [main] INFO c.a.n.c.c.u.JvmUtil - [init,59] - isMultiInstance:false 15:54:07.859 [main] WARN c.a.c.n.c.NacosPropertySourceBuilder - [loadNacosData,97] - Ignore the empty nacos configuration and get it based on dataId[ruoyi-system.yaml] & group[DEFAULT_GROUP] 15:54:07.863 [main] WARN c.a.c.n.c.NacosPropertySourceBuilder - [loadNacosData,97] - Ignore the empty nacos configuration and get it based on dataId[ruoyi-system-dev.yaml] & group[DEFAULT_GROUP] 15:54:07.879 [main] INFO c.r.s.RuoYiSystemApplication - [logStartupProfileInfo,660] - The following 1 profile is active: "dev" 15:54:07.889 [main] WARN o.s.c.a.AnnotationTypeMapping - [addConventionMappings,321] - Support for convention-based annotation attribute overrides is deprecated and will be removed in Spring Framework 6.2. Please annotate the following attributes in @com.ruoyi.common.security.annotation.EnableRyFeignClients with appropriate @AliasFor declarations: [clients, basePackageClasses, basePackages, defaultConfiguration] 15:54:08.906 [main] WARN o.m.s.m.ClassPathMapperScanner - [warn,44] - No MyBatis mapper was found in '[com.ruoyi.system.mapper]' package. Please check your configuration. 15:54:09.316 [main] WARN o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - [postProcessAfterInitialization,437] - Bean 'org.springframework.cloud.commons.config.CommonsConfigAutoConfiguration' of type [org.springframework.cloud.commons.config.CommonsConfigAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [sentinelBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. 15:54:09.320 [main] WARN o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - [postProcessAfterInitialization,437] - Bean 'org.springframework.cloud.client.loadbalancer.LoadBalancerDefaultMappingsProviderAutoConfiguration' of type [org.springframework.cloud.client.loadbalancer.LoadBalancerDefaultMappingsProviderAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [sentinelBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. 15:54:09.322 [main] WARN o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - [postProcessAfterInitialization,437] - Bean 'loadBalancerClientsDefaultsMappingsProvider' of type [org.springframework.cloud.client.loadbalancer.LoadBalancerDefaultMappingsProviderAutoConfiguration$$Lambda$857/0x000002b7d175b680] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [sentinelBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. 15:54:09.328 [main] WARN o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - [postProcessAfterInitialization,437] - Bean 'defaultsBindHandlerAdvisor' of type [org.springframework.cloud.commons.config.DefaultsBindHandlerAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [sentinelBeanPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. 15:54:09.394 [main] WARN o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - [postProcessAfterInitialization,429] - Bean 'org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration$DeferringLoadBalancerInterceptorConfig' of type [org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration$DeferringLoadBalancerInterceptorConfig] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). The currently created BeanPostProcessor [lbRestClientPostProcessor] is declared through a non-static factory method on that class; consider declaring it as static instead. 15:54:09.397 [main] WARN o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker - [postProcessAfterInitialization,437] - Bean 'deferringLoadBalancerInterceptor' of type [org.springframework.cloud.client.loadbalancer.DeferringLoadBalancerInterceptor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying). Is this bean getting eagerly injected/applied to a currently created BeanPostProcessor [lbRestClientPostProcessor]? Check the corresponding BeanPostProcessor declaration and its dependencies/advisors. If this bean does not have to be post-processed, declare it with ROLE_INFRASTRUCTURE. 15:54:09.680 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] 15:54:09.684 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] 15:54:09.685 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/10.1.31] 15:54:09.749 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext 15:54:10.230 [main] INFO c.a.c.s.SentinelWebMvcConfigurer - [addInterceptors,52] - [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**]. 15:54:11.079 [main] INFO c.a.d.p.DruidDataSource - [init,1002] - {dataSource-1,master} inited 15:54:11.080 [main] INFO c.b.d.d.DynamicRoutingDataSource - [addDataSource,158] - dynamic-datasource - add a datasource named [master] success 15:54:11.080 [main] INFO c.b.d.d.DynamicRoutingDataSource - [afterPropertiesSet,241] - dynamic-datasource initial loaded [1] datasource,primary datasource named [master] 15:54:11.193 [main] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - [refresh,633] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception with message: Failed to parse mapping resource: 'file [D:\java\project\RuoYi-Cloud\ruoyi-modules\ruoyi-system\target\classes\mapper\system\SysConfigMapper.xml]' 15:54:11.194 [main] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,215] - dynamic-datasource start closing .... 15:54:11.195 [main] INFO c.a.d.p.DruidDataSource - [close,2204] - {dataSource-1} closing ... 15:54:11.199 [main] INFO c.a.d.p.DruidDataSource - [close,2277] - {dataSource-1} closed 15:54:11.200 [main] INFO c.b.d.d.d.DefaultDataSourceDestroyer - [destroy,98] - dynamic-datasource close the datasource named [master] success, 15:54:11.200 [main] INFO c.b.d.d.DynamicRoutingDataSource - [destroy,219] - dynamic-datasource all closed success,bye 15:54:11.202 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] 15:54:11.235 [main] ERROR o.s.b.SpringApplication - [reportFailure,859] - Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception with message: Failed to parse mapping resource: 'file [D:\java\project\RuoYi-Cloud\ruoyi-modules\ruoyi-system\target\classes\mapper\system\SysConfigMapper.xml]' at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:636) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1355) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1185) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) at com.ruoyi.system.RuoYiSystemApplication.main(RuoYiSystemApplication.java:22) Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception with message: Failed to parse mapping resource: 'file [D:\java\project\RuoYi-Cloud\ruoyi-modules\ruoyi-system\target\classes\mapper\system\SysConfigMapper.xml]' at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:178) at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:644) ... 19 common frames omitted Caused by: java.io.IOException: Failed to parse mapping resource: 'file [D:\java\project\RuoYi-Cloud\ruoyi-modules\ruoyi-system\target\classes\mapper\system\SysConfigMapper.xml]' at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:700) at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:577) at org.mybatis.spring.SqlSessionFactoryBean.getObject(SqlSessionFactoryBean.java:720) at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration.sqlSessionFactory(MybatisAutoConfiguration.java:187) at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$SpringCGLIB$$0.CGLIB$sqlSessionFactory$2(<generated>) at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$SpringCGLIB$$FastClass$$1.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:258) at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:348) at org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration$$SpringCGLIB$$0.sqlSessionFactory(<generated>) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:146) ... 20 common frames omitted Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\java\project\RuoYi-Cloud\ruoyi-modules\ruoyi-system\target\classes\mapper\system\SysConfigMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'SysConfig'. Cause: java.lang.ClassNotFoundException: Cannot find class: SysConfig at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:127) at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:100) at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:698) ... 33 common frames omitted Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'SysConfig'. Cause: java.lang.ClassNotFoundException: Cannot find class: SysConfig at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:103) at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:269) at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:261) at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:253) at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:123) ... 35 common frames omitted Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'SysConfig'. Cause: java.lang.ClassNotFoundException: Cannot find class: SysConfig at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:128) at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:132) at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:101) ... 39 common frames omitted Caused by: java.lang.ClassNotFoundException: Cannot find class: SysConfig at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:226) at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:103) at org.apache.ibatis.io.Resources.classForName(Resources.java:322) at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:124) ... 41 common frames omitted 15:54:11.239 [Thread-5] WARN c.a.n.c.n.NotifyCenter - [shutdown,134] - [NotifyCenter] Start destroying Publisher 15:54:11.239 [Thread-3] WARN c.a.n.c.h.HttpClientBeanHolder - [shutdown,102] - [HttpClientBeanHolder] Start destroying common HttpClient 15:54:11.240 [Thread-5] WARN c.a.n.c.n.NotifyCenter - [shutdown,151] - [NotifyCenter] Destruction of the end 15:54:11.240 [Thread-3] WARN c.a.n.c.h.HttpClientBeanHolder - [shutdown,111] - [HttpClientBeanHolder] Destruction of the end Process finished with exit code 1
最新发布
09-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值