在Spring DM中使用Annotations发布和引用服务

本文详细介绍了如何使用Annotation简化Spring与OSGi的集成过程,包括配置和自定义实现发布OSGi服务的Annotation。通过一系列步骤和代码示例,展示了如何启用SpringDM的Annotation功能并编写自己的实现,最终实现更简洁、易维护的服务注册与引入。

Spring DM并不是OSGi规范的实现,也就是说它不是OSGi容器。它只是一套用于在OSGi环境中将Spring Bean注册发布为OSGi服务的工具。它充分利用Spring的特性,将OSGi与Spring无缝的加以结合,实现了Spring的模块化开发。

1. 在使用Spring DM进行开发过程中发现的问题:

虽然Spring DM改进了OSGi原本的DS开发,使用Spring Bean来完成服务的注册。但是对于“懒惰”的程序员来说还是太过繁琐,首先需要在XML中注册SpringBean,然后要使用SpringDM提供的特殊命名空间(<osgi:service>)发布服务,最后当需要引入一个OSGi服务时又要使用SpringDM提供的另外一个特殊命名空间(<osgi:reference>)来引入服务。对于一个只有十几个Bean的应用程序来说,这些配置量也无所谓,但是当应用程序的Bean发展到上百个的时候,这简直就是配置噩梦。尤其是在多人合作开发的环境下,经常会发生遗漏配置的情况,一旦遗漏则OSGi服务将无法启动,并且要在上百个Bean配置XML文件中查找到底是哪个遗漏了,的确也是一件体力活(这正是IT民工的悲惨命运)。

当然Spring DM的开发团队也想到了这点,为我们开发人员提供了Annotation的选项,这样可以大大减少XML的配置量(这里我们不争论XML和Annotation孰优孰劣)。但是不知为何,Spring DM只提供了引入服务的Annotation,并没有提供发布OSGi服务的Annotation,这让我很费解?其次,由于SpringDM是在JDK1.4环境下编译的,所以默认情况下Annotation的功能是Disabled的。这又让我很费解?到底让我们用不用Annotation!

2. 问题的解决方案:

针对上述的问题,我们可以通过以下方法解决;

1) 如何启用Spring DM的Annotation功能

通过阅读Spring DM提供的官方文档,让我很莫名,关于Annotation的介绍只有寥寥数语,而且还是放在附录中介绍的。可能是我的英文水平太烂,总之一句话,没看懂!后来从解决其他问题的过程中得到了启示,终于开启了SpringDM的Annotation功能。

第一步,创建一个Fragment类型的Bundle,具体的目录结构如下图所示:


这里主要关注2个文件,一个是extender.xml文件和MANIFEST.MF文件。

第二步,创建extender.xml文件:

在上图所示的目录结构中创建一个extender.xml文件,这个文件用于覆盖SpringDM Extender的配置选项。因为默认情况下是不支持Annotation的,所以要将指定的属性值设置为开启状态,才能使用Annotation功能。配置文件的内容如下:


这个配置文件其实就是一个Spring Bean的配置文件。将process.annotations属性设置成true,就开启了Spring DM的Annotation功能。

第三步,创建MANIFEST.MF文件,这个文件是Bundle的属性配置文件,我们在这个文件中指定Fragment-Host属性,具体内容如下:


其中我们要关注的是Fragment-Host属性,这里指定为org.springframework.osgi.extender,表示在extender Bundle启动之前先启动ftps-extender-config这个Bundle,这样就将默认的属性值更新为我们设置的属性值。

第四步,在Spring的XML配置文件中注册处理Annotation的处理器Bean,如下所示:


通过上述4个步骤,我们就开启了Spring DM的Annotation功能。

以下例子展示如何使用Spring DM的Annotation功能:


其中@ServiceReference就是引入OSGi服务的Annotation,它等效于XML中的<osgi:reference/>配置项。

2) 编写自己的Annotation实现OSGi服务的发布:

胜利的喜悦还没维持多久,新的问题又随之而来。既然我们已经有引入OSGi服务的Annotation,为什么发布OSGi服务的时候不能使用Annotation呢?我们仍然在继续编写一大坨苦涩的OSGi配置项,这种工作即枯燥又乏味。但是寻遍SpringDM的所有官方文档,包括SpringDM提供的Annotation扩展包源代码,都没有找到发布OSGi服务的Annotation。Google一下,大致都是提问的,没有回答问题的。没有办法,只能靠自己。经过对SpringDM源代码的阅读以及使用BEBUG来查看代码流程的走向,终于了解了SpringDM将Spring Bean发布为OSGi服务的大致方法。其中最关键的对象就是:OsgiServiceFactoryBean。这个工厂bean就是将SpringBean发布为OSGi服务的关键类。这个类并不难懂,有兴趣的朋友可以阅读一下这个类的源代码。由于我们是解决问题的文章,不是谈理论的文章,所以我们继续看实现方案:

首先介绍一下解决方案的大致流程。1)通过编写一个实现了BeanPostProcessor接口的处理器类,我们就可以对Bean的生命周期进行控制。2)在容器中的某个Bean被初始化之后,我们拦截这个Bean,并获取该Bean上是否写了注册OSGi服务的Annotation。3)如果是,则实例化OsgiServiceFactoryBean对象,设置相关的属性值,并调用OsgiServiceFactoryBean对象的afterPropertiesSet方法,进行OSGi服务的注册和发布。最后返回该OsgiServiceFactoryBean对象。同时将该对象的引用放入一个集合中保存用于OSGi服务的注销。4)当处理器类被销毁时,对集合中的所有OsgiServiceFactoryBean对象执行destroy方法,完成OSGi服务的注销操作。

先来看Annotation的代码,很简单,如下所示:


ElementType.TYPE指定这个Annotation只能用于类声明,接口声明上。

接着是处理器的实现代码,先关注类签名:


这里需要关注的是实现的几个接口的用途。实现BundleContextAware接口是为了在处理器中获取Bundle上下文对象。实现BeanClassLoaderAware接口是为了在处理器中获取ClassLoader对象,这些对象都是注册发布OSGi服务所必须使用的对象。而继承InstantiationAwareBeanPostProcessorAdapter适配器是为了在Spring Bean初始化完之后给我们一个机会进行定制的特殊处理。我们需要覆盖的是InstantiationAwareBeanPostProcessorAdapter类的postProcessAfterInitialization方法。该方法在Spring Bean初始化之后执行。我们来看这个方法的实现,如下所示:


代码中的注释已经很好的说明了各逻辑块的实现目的,不再赘述。其中需要关注createExporter方法,这个方法是创建OsgiServiceFactoryBean对象的。如下所示:


代码很简单,就是实例化对象,并调用注册发布OSGi服务的方法。其实发布一个OSGi服务只需要三个参数:Bean名称,Bean对象,Bean实现接口类型的数组,这个和XML中的配置属性一一对应:

<osgi:service ref="systemConfigureServiceBean" interface="org.storevm.ftps.biz.service.core.SystemConfigureService"/>

其中ref属性对应Bean名称以及一个Bean对象的引用,interface属性对应Bean实现接口类型的一个数组。

该方法中用到的一些其他实例变量的定义如下:


最后来看一下OSGi服务的注销实现,代码如下:


注销服务就是将先前注册时保存下来的OsgiServiceFactoryBean对象集合进行destroy方法的调用。

3. 启用发布OSGi服务的Annotation:

相比较开启SpringDM自带的Annotation,我们这个Annotation的启用方法要简单的多。只要在Spring的XML中注册这个处理器Bean就可以了,代码如下:


以下实例代码展示了如何使用使用Annotation发布一个OSGi服务发布:


其中@OsgiService就是注册发布OSGi服务的Anntation。到此我们终于实现了使用Annotation来发布注册OSGi服务以及引入OSGi服务,我们不再需要在XML中配置那一大坨无聊的OSGi服务配置了。最后引用一句名言:任何发明创造源自于“懒惰”


springboot项目配置多数据源时,启动项目出现以下异常,请分析原因,并给出解决办法:D:\sofeware\jdk\jdk1.8\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:1522,suspend=y,server=n -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:C:\Users\Wyh\AppData\Local\JetBrains\IntelliJIdea2022.1\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "D:\sofeware\jdk\jdk1.8\jre\lib\charsets.jar;D:\sofeware\jdk\jdk1.8\jre\lib\deploy.jar;D:\sofeware\jdk\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\sofeware\jdk\jdk1.8\jre\lib\ext\cldrdata.jar;D:\sofeware\jdk\jdk1.8\jre\lib\ext\dnsns.jar;D:\sofeware\jdk\jdk1.8\jre\lib\ext\jaccess.jar;D:\sofeware\jdk\jdk1.8\jre\lib\ext\jfxrt.jar;D:\sofeware\jdk\jdk1.8\jre\lib\ext\localedata.jar;D:\sofeware\jdk\jdk1.8\jre\lib\ext\nashorn.jar;D:\sofeware\jdk\jdk1.8\jre\lib\ext\sunec.jar;D:\sofeware\jdk\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\sofeware\jdk\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\sofeware\jdk\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\sofeware\jdk\jdk1.8\jre\lib\ext\zipfs.jar;D:\sofeware\jdk\jdk1.8\jre\lib\javaws.jar;D:\sofeware\jdk\jdk1.8\jre\lib\jce.jar;D:\sofeware\jdk\jdk1.8\jre\lib\jfr.jar;D:\sofeware\jdk\jdk1.8\jre\lib\jfxswt.jar;D:\sofeware\jdk\jdk1.8\jre\lib\jsse.jar;D:\sofeware\jdk\jdk1.8\jre\lib\management-agent.jar;D:\sofeware\jdk\jdk1.8\jre\lib\plugin.jar;D:\sofeware\jdk\jdk1.8\jre\lib\resources.jar;D:\sofeware\jdk\jdk1.8\jre\lib\rt.jar;D:\workspace\gssf-sjh-project\wisesys\taiji-system\target\classes;D:\sofeware\maven\dm-repository\org\springframework\cloud\spring-cloud-starter-bootstrap\3.1.1\spring-cloud-starter-bootstrap-3.1.1.jar;D:\sofeware\maven\dm-repository\org\springframework\cloud\spring-cloud-starter\3.1.1\spring-cloud-starter-3.1.1.jar;D:\sofeware\maven\dm-repository\org\springframework\security\spring-security-rsa\1.0.10.RELEASE\spring-security-rsa-1.0.10.RELEASE.jar;D:\sofeware\maven\dm-repository\org\bouncycastle\bcpkix-jdk15on\1.68\bcpkix-jdk15on-1.68.jar;D:\sofeware\maven\dm-repository\org\bouncycastle\bcprov-jdk15on\1.68\bcprov-jdk15on-1.68.jar;D:\sofeware\maven\dm-repository\org\springframework\cloud\spring-cloud-starter-loadbalancer\3.1.1\spring-cloud-starter-loadbalancer-3.1.1.jar;D:\sofeware\maven\dm-repository\org\springframework\cloud\spring-cloud-loadbalancer\3.1.1\spring-cloud-loadbalancer-3.1.1.jar;D:\sofeware\maven\dm-repository\io\projectreactor\reactor-core\3.4.14\reactor-core-3.4.14.jar;D:\sofeware\maven\dm-repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;D:\sofeware\maven\dm-repository\io\projectreactor\addons\reactor-extra\3.4.6\reactor-extra-3.4.6.jar;D:\sofeware\maven\dm-repository\org\springframework\boot\spring-boot-starter-cache\2.6.3\spring-boot-starter-cache-2.6.3.jar;D:\sofeware\maven\dm-repository\org\springframework\spring-context-support\5.3.15\spring-context-support-5.3.15.jar;D:\sofeware\maven\dm-repository\com\stoyanr\evictor\1.0.0\evictor-1.0.0.jar;D:\sofeware\maven\dm-repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-discovery\2021.0.1.0\spring-cloud-starter-alibaba-nacos-discovery-2021.0.1.0.jar;D:\sofeware\maven\dm-repository\com\alibaba\cloud\spring-cloud-alibaba-commons\2021.0.1.0\spring-cloud-alibaba-commons-2021.0.1.0.jar;D:\sofeware\maven\dm-repository\com\alibaba\nacos\nacos-client\1.4.2\nacos-client-1.4.2.jar;D:\sofeware\maven\dm-repository\com\alibaba\nacos\nacos-common\1.4.2\nacos-common-1.4.2.jar;D:\sofeware\maven\dm-repository\org\apache\httpcomponents\httpasyncclient\4.1.5\httpasyncclient-4.1.5.jar;D:\sofeware\maven\dm-repository\org\apache\httpcomponents\httpcore\4.4.15\httpcore-4.4.15.jar;D:\sofeware\maven\dm-repository\org\apache\httpcomponents\httpcore-nio\4.4.15\httpcore-nio-4.4.15.jar;D:\sofeware\maven\dm-repository\org\apache\httpcomponents\httpclient\4.5.13\httpclient-4.5.13.jar;D:\sofeware\maven\dm-repository\com\alibaba\nacos\nacos-api\1.4.2\nacos-api-1.4.2.jar;D:\sofeware\maven\dm-repository\io\prometheus\simpleclient\0.12.0\simpleclient-0.12.0.jar;D:\sofeware\maven\dm-repository\io\prometheus\simpleclient_tracer_otel\0.12.0\simpleclient_tracer_otel-0.12.0.jar;D:\sofeware\maven\dm-repository\io\prometheus\simpleclient_tracer_common\0.12.0\simpleclient_tracer_common-0.12.0.jar;D:\sofeware\maven\dm-repository\io\prometheus\simpleclient_tracer_otel_agent\0.12.0\simpleclient_tracer_otel_agent-0.12.0.jar;D:\sofeware\maven\dm-repository\org\yaml\snakeyaml\1.29\snakeyaml-1.29.jar;D:\sofeware\maven\dm-repository\com\alibaba\spring\spring-context-support\1.0.11\spring-context-support-1.0.11.jar;D:\sofeware\maven\dm-repository\org\springframework\cloud\spring-cloud-commons\3.1.1\spring-cloud-commons-3.1.1.jar;D:\sofeware\maven\dm-repository\org\springframework\security\spring-security-crypto\5.6.1\spring-security-crypto-5.6.1.jar;D:\sofeware\maven\dm-repository\org\springframework\cloud\spring-cloud-context\3.1.1\spring-cloud-context-3.1.1.jar;D:\sofeware\maven\dm-repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-config\2021.0.1.0\spring-cloud-starter-alibaba-nacos-config-2021.0.1.0.jar;D:\sofeware\maven\dm-repository\org\springframework\boot\spring-boot-starter-web\2.6.3\spring-boot-starter-web-2.6.3.jar;D:\sofeware\maven\dm-repository\org\springframework\boot\spring-boot-starter\2.6.3\spring-boot-starter-2.6.3.jar;D:\sofeware\maven\dm-repository\org\springframework\boot\spring-boot\2.6.3\spring-boot-2.6.3.jar;D:\sofeware\maven\dm-repository\org\springframework\boot\spring-boot-starter-logging\2.6.3\spring-boot-starter-logging-2.6.3.jar;D:\sofeware\maven\dm-repository\ch\qos\logback\logback-classic\1.2.9\logback-classic-1.2.9.jar;D:\sofeware\maven\dm-repository\ch\qos\logback\logback-core\1.2.10\logback-core-1.2.10.jar;D:\sofeware\maven\dm-repository\org\slf4j\jul-to-slf4j\1.7.33\jul-to-slf4j-1.7.33.jar;D:\sofeware\maven\dm-repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\sofeware\maven\dm-repository\org\springframework\spring-core\5.3.15\spring-core-5.3.15.jar;D:\sofeware\maven\dm-repository\org\springframework\spring-jcl\5.3.15\spring-jcl-5.3.15.jar;D:\sofeware\maven\dm-repository\org\springframework\boot\spring-boot-starter-json\2.6.3\spring-boot-starter-json-2.6.3.jar;D:\sofeware\maven\dm-repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.1\jackson-datatype-jdk8-2.13.1.jar;D:\sofeware\maven\dm-repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.1\jackson-datatype-jsr310-2.13.1.jar;D:\sofeware\maven\dm-repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.1\jackson-module-parameter-names-2.13.1.jar;D:\sofeware\maven\dm-repository\org\springframework\boot\spring-boot-starter-tomcat\2.6.3\spring-boot-starter-tomcat-2.6.3.jar;D:\sofeware\maven\dm-repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.56\tomcat-embed-core-9.0.56.jar;D:\sofeware\maven\dm-repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.56\tomcat-embed-el-9.0.56.jar;D:\sofeware\maven\dm-repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.56\tomcat-embed-websocket-9.0.56.jar;D:\sofeware\maven\dm-repository\org\springframework\spring-web\5.3.15\spring-web-5.3.15.jar;D:\sofeware\maven\dm-repository\org\springframework\spring-beans\5.3.15\spring-beans-5.3.15.jar;D:\sofeware\maven\dm-repository\org\springframework\spring-webmvc\5.3.15\spring-webmvc-5.3.15.jar;D:\sofeware\maven\dm-repository\org\springframework\spring-aop\5.3.15\spring-aop-5.3.15.jar;D:\sofeware\maven\dm-repository\org\springframework\spring-context\5.3.15\spring-context-5.3.15.jar;D:\sofeware\maven\dm-repository\org\springframework\spring-expression\5.3.15\spring-expression-5.3.15.jar;D:\sofeware\maven\dm-repository\mysql\mysql-connector-java\8.0.27\mysql-connector-java-8.0.27.jar;D:\sofeware\maven\dm-repository\com\google\protobuf\protobuf-java\3.11.4\protobuf-java-3.11.4.jar;D:\workspace\gssf-sjh-project\wisesys\taiji-common\taiji-common-datascope\target\classes;D:\workspace\gssf-sjh-project\wisesys\taiji-common\taiji-common-security\target\classes;D:\workspace\gssf-sjh-project\wisesys\taiji-common\taiji-common-log\target\classes;D:\workspace\gssf-sjh-project\wisesys\taiji-common\taiji-common-redis\target\classes;D:\sofeware\maven\dm-repository\org\springframework\boot\spring-boot-starter-data-redis\2.6.3\spring-boot-starter-data-redis-2.6.3.jar;D:\sofeware\maven\dm-repository\org\springframework\data\spring-data-redis\2.6.1\spring-data-redis-2.6.1.jar;D:\sofeware\maven\dm-repository\org\springframework\data\spring-data-keyvalue\2.6.1\spring-data-keyvalue-2.6.1.jar;D:\sofeware\maven\dm-repository\org\springframework\data\spring-data-commons\2.6.1\spring-data-commons-2.6.1.jar;D:\sofeware\maven\dm-repository\org\springframework\spring-tx\5.3.15\spring-tx-5.3.15.jar;D:\sofeware\maven\dm-repository\org\springframework\spring-oxm\5.3.15\spring-oxm-5.3.15.jar;D:\sofeware\maven\dm-repository\io\lettuce\lettuce-core\6.1.6.RELEASE\lettuce-core-6.1.6.RELEASE.jar;D:\sofeware\maven\dm-repository\io\netty\netty-common\4.1.73.Final\netty-common-4.1.73.Final.jar;D:\sofeware\maven\dm-repository\io\netty\netty-handler\4.1.73.Final\netty-handler-4.1.73.Final.jar;D:\sofeware\maven\dm-repository\io\netty\netty-resolver\4.1.73.Final\netty-resolver-4.1.73.Final.jar;D:\sofeware\maven\dm-repository\io\netty\netty-buffer\4.1.73.Final\netty-buffer-4.1.73.Final.jar;D:\sofeware\maven\dm-repository\io\netty\netty-codec\4.1.73.Final\netty-codec-4.1.73.Final.jar;D:\sofeware\maven\dm-repository\io\netty\netty-tcnative-classes\2.0.46.Final\netty-tcnative-classes-2.0.46.Final.jar;D:\sofeware\maven\dm-repository\io\netty\netty-transport\4.1.73.Final\netty-transport-4.1.73.Final.jar;D:\workspace\gssf-sjh-project\wisesys\taiji-common\taiji-common-core\target\classes;D:\sofeware\maven\dm-repository\org\springframework\cloud\spring-cloud-starter-openfeign\3.1.1\spring-cloud-starter-openfeign-3.1.1.jar;D:\sofeware\maven\dm-repository\org\springframework\cloud\spring-cloud-openfeign-core\3.1.1\spring-cloud-openfeign-core-3.1.1.jar;D:\sofeware\maven\dm-repository\org\springframework\boot\spring-boot-starter-aop\2.6.3\spring-boot-starter-aop-2.6.3.jar;D:\sofeware\maven\dm-repository\org\aspectj\aspectjweaver\1.9.7\aspectjweaver-1.9.7.jar;D:\sofeware\maven\dm-repository\io\github\openfeign\form\feign-form-spring\3.8.0\feign-form-spring-3.8.0.jar;D:\sofeware\maven\dm-repository\io\github\openfeign\form\feign-form\3.8.0\feign-form-3.8.0.jar;D:\sofeware\maven\dm-repository\io\github\openfeign\feign-core\11.8\feign-core-11.8.jar;D:\sofeware\maven\dm-repository\io\github\openfeign\feign-slf4j\11.8\feign-slf4j-11.8.jar;D:\sofeware\maven\dm-repository\org\apache\commons\commons-pool2\2.11.1\commons-pool2-2.11.1.jar;D:\sofeware\maven\dm-repository\com\github\pagehelper\pagehelper-spring-boot-starter\1.4.1\pagehelper-spring-boot-starter-1.4.1.jar;D:\sofeware\maven\dm-repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\2.2.2\mybatis-spring-boot-starter-2.2.2.jar;D:\sofeware\maven\dm-repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\2.2.2\mybatis-spring-boot-autoconfigure-2.2.2.jar;D:\sofeware\maven\dm-repository\org\mybatis\mybatis\3.5.9\mybatis-3.5.9.jar;D:\sofeware\maven\dm-repository\com\github\pagehelper\pagehelper-spring-boot-autoconfigure\1.4.1\pagehelper-spring-boot-autoconfigure-1.4.1.jar;D:\sofeware\maven\dm-repository\com\github\pagehelper\pagehelper\5.3.0\pagehelper-5.3.0.jar;D:\sofeware\maven\dm-repository\com\github\jsqlparser\jsqlparser\4.2\jsqlparser-4.2.jar;D:\sofeware\maven\dm-repository\org\springframework\boot\spring-boot-starter-validation\2.6.3\spring-boot-starter-validation-2.6.3.jar;D:\sofeware\maven\dm-repository\org\hibernate\validator\hibernate-validator\6.2.0.Final\hibernate-validator-6.2.0.Final.jar;D:\sofeware\maven\dm-repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;D:\sofeware\maven\dm-repository\org\jboss\logging\jboss-logging\3.4.3.Final\jboss-logging-3.4.3.Final.jar;D:\sofeware\maven\dm-repository\org\apache\commons\commons-lang3\3.12.0\commons-lang3-3.12.0.jar;D:\sofeware\maven\dm-repository\commons-io\commons-io\2.5\commons-io-2.5.jar;D:\sofeware\maven\dm-repository\commons-fileupload\commons-fileupload\1.3.3\commons-fileupload-1.3.3.jar;D:\sofeware\maven\dm-repository\commons-beanutils\commons-beanutils\1.9.3\commons-beanutils-1.9.3.jar;D:\sofeware\maven\dm-repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;D:\sofeware\maven\dm-repository\cn\hutool\hutool-all\5.2.3\hutool-all-5.2.3.jar;D:\sofeware\maven\dm-repository\org\projectlombok\lombok\1.18.22\lombok-1.18.22.jar;D:\sofeware\maven\dm-repository\com\alibaba\fastjson\1.2.83\fastjson-1.2.83.jar;D:\sofeware\maven\dm-repository\dom4j\dom4j\1.6.1\dom4j-1.6.1.jar;D:\sofeware\maven\dm-repository\xml-apis\xml-apis\1.0.b2\xml-apis-1.0.b2.jar;D:\sofeware\maven\dm-repository\org\postgresql\postgresql\42.2.25\postgresql-42.2.25.jar;D:\sofeware\maven\dm-repository\org\checkerframework\checker-qual\3.5.0\checker-qual-3.5.0.jar;D:\sofeware\maven\dm-repository\com\newtec\license\2.3.0\license-2.3.0.jar;D:\sofeware\maven\dm-repository\com\dm\DmJdbcDriver\1.8.0\DmJdbcDriver-1.8.0.jar;D:\sofeware\maven\dm-repository\io\minio\minio\8.0.3\minio-8.0.3.jar;D:\sofeware\maven\dm-repository\com\carrotsearch\thirdparty\simple-xml-safe\2.7.1\simple-xml-safe-2.7.1.jar;D:\sofeware\maven\dm-repository\com\google\guava\guava\29.0-jre\guava-29.0-jre.jar;D:\sofeware\maven\dm-repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;D:\sofeware\maven\dm-repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;D:\sofeware\maven\dm-repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;D:\sofeware\maven\dm-repository\com\google\errorprone\error_prone_annotations\2.3.4\error_prone_annotations-2.3.4.jar;D:\sofeware\maven\dm-repository\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar;D:\sofeware\maven\dm-repository\com\fasterxml\jackson\core\jackson-annotations\2.13.1\jackson-annotations-2.13.1.jar;D:\sofeware\maven\dm-repository\com\fasterxml\jackson\core\jackson-core\2.13.1\jackson-core-2.13.1.jar;D:\sofeware\maven\dm-repository\com\fasterxml\jackson\core\jackson-databind\2.13.1\jackson-databind-2.13.1.jar;D:\sofeware\maven\dm-repository\com\huaweicloud\esdk-obs-java\3.21.11\esdk-obs-java-3.21.11.jar;D:\sofeware\maven\dm-repository\com\jamesmurty\utils\java-xmlbuilder\1.3\java-xmlbuilder-1.3.jar;D:\sofeware\maven\dm-repository\org\apache\logging\log4j\log4j-core\2.17.1\log4j-core-2.17.1.jar;D:\sofeware\maven\dm-repository\org\apache\logging\log4j\log4j-api\2.17.1\log4j-api-2.17.1.jar;D:\sofeware\maven\dm-repository\commons-net\commons-net\3.8.0\commons-net-3.8.0.jar;D:\sofeware\maven\dm-repository\com\squareup\okhttp3\okhttp\4.9.1\okhttp-4.9.1.jar;D:\sofeware\maven\dm-repository\org\jetbrains\kotlin\kotlin-stdlib\1.6.10\kotlin-stdlib-1.6.10.jar;D:\sofeware\maven\dm-repository\org\jetbrains\annotations\13.0\annotations-13.0.jar;D:\sofeware\maven\dm-repository\com\squareup\okio\okio\2.7.0\okio-2.7.0.jar;D:\sofeware\maven\dm-repository\org\jetbrains\kotlin\kotlin-stdlib-common\1.6.10\kotlin-stdlib-common-1.6.10.jar;D:\sofeware\maven\dm-repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;D:\sofeware\maven\dm-repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;D:\sofeware\maven\dm-repository\io\swagger\swagger-models\1.5.20\swagger-models-1.5.20.jar;D:\sofeware\maven\dm-repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;D:\sofeware\maven\dm-repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;D:\sofeware\maven\dm-repository\net\bytebuddy\byte-buddy\1.11.22\byte-buddy-1.11.22.jar;D:\sofeware\maven\dm-repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;D:\sofeware\maven\dm-repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;D:\sofeware\maven\dm-repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;D:\sofeware\maven\dm-repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;D:\sofeware\maven\dm-repository\org\slf4j\slf4j-api\1.7.33\slf4j-api-1.7.33.jar;D:\sofeware\maven\dm-repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;D:\sofeware\maven\dm-repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;D:\sofeware\maven\dm-repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;D:\sofeware\maven\dm-repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;D:\sofeware\maven\dm-repository\com\kingbase8\Driver\kingbase8\8.6.0\kingbase8-8.6.0.jar;D:\sofeware\maven\dm-repository\com\dameng\DmJdbcDriver18\8.1.1.193\DmJdbcDriver18-8.1.1.193.jar;D:\sofeware\maven\dm-repository\commons-httpclient\commons-httpclient\3.1\commons-httpclient-3.1.jar;D:\sofeware\maven\dm-repository\commons-logging\commons-logging\1.0.4\commons-logging-1.0.4.jar;D:\sofeware\maven\dm-repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;D:\workspace\gssf-sjh-project\wisesys\taiji-system\src\main\lib\gaussdbjdbc.jar;D:\sofeware\maven\dm-repository\com\baomidou\mybatis-plus-boot-starter\3.4.1\mybatis-plus-boot-starter-3.4.1.jar;D:\sofeware\maven\dm-repository\com\baomidou\mybatis-plus\3.4.1\mybatis-plus-3.4.1.jar;D:\sofeware\maven\dm-repository\com\baomidou\mybatis-plus-extension\3.4.1\mybatis-plus-extension-3.4.1.jar;D:\sofeware\maven\dm-repository\com\baomidou\mybatis-plus-core\3.4.1\mybatis-plus-core-3.4.1.jar;D:\sofeware\maven\dm-repository\com\baomidou\mybatis-plus-annotation\3.4.1\mybatis-plus-annotation-3.4.1.jar;D:\sofeware\maven\dm-repository\org\mybatis\mybatis-spring\2.0.5\mybatis-spring-2.0.5.jar;D:\sofeware\maven\dm-repository\org\springframework\boot\spring-boot-autoconfigure\2.6.3\spring-boot-autoconfigure-2.6.3.jar;D:\sofeware\maven\dm-repository\org\springframework\boot\spring-boot-starter-jdbc\2.6.3\spring-boot-starter-jdbc-2.6.3.jar;D:\sofeware\maven\dm-repository\com\zaxxer\HikariCP\4.0.3\HikariCP-4.0.3.jar;D:\sofeware\maven\dm-repository\org\springframework\spring-jdbc\5.3.15\spring-jdbc-5.3.15.jar;D:\sofeware\maven\dm-repository\com\google\code\gson\gson\2.6.2\gson-2.6.2.jar;D:\sofeware\maven\dm-repository\com\alibaba\easyexcel\2.2.7\easyexcel-2.2.7.jar;D:\sofeware\maven\dm-repository\org\apache\poi\poi\3.17\poi-3.17.jar;D:\sofeware\maven\dm-repository\org\apache\commons\commons-collections4\4.4\commons-collections4-4.4.jar;D:\sofeware\maven\dm-repository\org\apache\poi\poi-ooxml\4.1.2\poi-ooxml-4.1.2.jar;D:\sofeware\maven\dm-repository\org\apache\commons\commons-compress\1.19\commons-compress-1.19.jar;D:\sofeware\maven\dm-repository\com\github\virtuald\curvesapi\1.06\curvesapi-1.06.jar;D:\sofeware\maven\dm-repository\org\apache\poi\poi-ooxml-schemas\3.17\poi-ooxml-schemas-3.17.jar;D:\sofeware\maven\dm-repository\org\apache\xmlbeans\xmlbeans\2.6.0\xmlbeans-2.6.0.jar;D:\sofeware\maven\dm-repository\stax\stax-api\1.0.1\stax-api-1.0.1.jar;D:\sofeware\maven\dm-repository\cglib\cglib\3.1\cglib-3.1.jar;D:\sofeware\maven\dm-repository\org\ow2\asm\asm\4.2\asm-4.2.jar;D:\sofeware\maven\dm-repository\org\ehcache\ehcache\3.9.9\ehcache-3.9.9.jar;D:\sofeware\maven\dm-repository\com\alibaba\fastjson2\fastjson2\2.0.52\fastjson2-2.0.52.jar;D:\IDEA2022\IntelliJ IDEA 2022.1.4\lib\idea_rt.jar" com.taiji.TaiJiSystemApplication Connected to the target VM, address: '127.0.0.1:1522', transport: 'socket' . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.6.3) 09:18:40.270 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9201"] 09:18:40.273 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat] 09:18:40.273 [main] INFO o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.56] 09:18:40.350 [main] INFO o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext 09:18:40.835 [main] INFO o.a.c.c.StandardService - [log,173] - Stopping service [Tomcat] 09:18:40.868 [main] ERROR org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter - *************************** APPLICATION FAILED TO START *************************** Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class Action: Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath. If you have database settings to be loaded from a particular profile you may need to activate it (the profiles dev are currently active). Disconnected from the target VM, address: '127.0.0.1:1522', transport: 'socket' Process finished with exit code 1
最新发布
08-20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值