gpt4 book ai didi

java - 将Spring Boot集成到独立的现有Spring Jar中

转载 作者:行者123 更新时间:2023-12-01 09:24:26 27 4
gpt4 key购买 nike

我在将Spring Boot集成到现有Spring项目中时遇到问题。我有一些树状问题,但是在开始讨论这些问题之前,让我先解释一下当前的体系结构:

当前的项目

我有两个项目。第一个叫做myProject.toolkit,在女巫中只有一个主类,我实现了一个无尽的do-while循环。此循环创建ProcessBuilder以便开始新的过程。当该过程终止时,它检查是否需要此出口。如果是这样,它将终止。如果没有,它将再次开始相同的过程(不是很漂亮,但我仍在学习,也许将来我会有更好的主意)。
第二个项目称为myProject.dependencies,这是将从循环内的工具箱启动的程序。这也是真实的项目,因为该工具包仅用于监视它。

这两个项目都是Maven项目,可以使用AspectJ编译为独立的jar文件。
myProject.dependencies具有sprint引导,休眠和jpa。我的MySQL数据库一切正常。我可以创建服务,该服务将使用存储库来持久化实体。

为此,我创建了一个名为JpaConfig的类,该类中具有所有必需的配置,因为xml文件不起作用。它看起来像这样缩短:

@EnableScheduling
@EnableAsync
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
@ComponentScan(basePackages = {"myProject"})
@Configuration
@EnableJpaRepositories
public class JpaConfig {

@Bean
public InstrumentationLoadTimeWeaver loadTimeWeaver(){
return new InstrumentationLoadTimeWeaver();
}

@Bean
public DataSource dataSource(){
// creates, configures and returnes a "BoneCPDataSource" Object
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(){
// creates, configures and returnes a "LocalContainerEntityManagerFactoryBean" Object
}

@Bean
public JpaTransactionManager transactionManager(){
// creates, configures and returnes a "JpaTransactionManager" Object
}

}


在我的 myProject.dependencies项目的主类中,我调用一条魔术线以使弹簧工作:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JpaConfig.class);


通过这一行,配置被加载,我可以使用hibernate,jpa和spring及其所有功能。

集成弹簧靴

现在,我想将Spring Boot添加到项目中,因为我需要一个REST API。而且因为我听说弹簧靴可以在没有雄猫或玻璃鱼的情况下运行,也可以在罐子中而不是战争中运行,所以我认为这对我来说是理想的架构。

因此,我阅读了一些文章以验证这一点,并发现Spring Boot带来了自己的集成tomcat,我试图在现有项目中实现它。

我在 pom.xml中添加了以下依赖项:

    <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.4.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>1.4.1.RELEASE</version>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>1.4.1.RELEASE</version>
</dependency>


而且因为我无法设置父pom(我已经有一个父集,并且在maven中不可能有多个父集),所以我也将其添加到pom中却不了解它,但是由于这些行也位于 org.springframework.boot:spring-boot-starter-parent:1.4.1.RELEASE中,每个人都告诉我依靠此配置,我添加了它:

    <pluginManagement>
<plugins>
<!-- Apply more sensible defaults for user projects -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.19.1</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>${start-class}</mainClass>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Tests.java</include>
<include>**/*Test.java</include>
</includes>
<excludes>
<exclude>**/Abstract*.java</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<archive>
<manifest>
<mainClass>${start-class}</mainClass>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<configuration>
<mainClass>${start-class}</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<configuration>
<delimiters>
<delimiter>${resource.delimiter}</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.1.11</version>
<executions>
<execution>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<verbose>true</verbose>
<dateFormat>yyyy-MM-dd'T'HH:mm:ssZ</dateFormat>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
</configuration>
</plugin>
<!-- Support our own plugin -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.4.1.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>${start-class}</mainClass>
</configuration>
</plugin>
<!-- Support shade packaging (if the user does not want to use our plugin) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.4.0.BUILD-SNAPSHOT</version>
</dependency>
</dependencies>
<configuration>
<keepDependenciesWithProvidedScope>true</keepDependenciesWithProvidedScope>
<createDependencyReducedPom>true</createDependencyReducedPom>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.springframework.boot.maven.PropertiesMergingResourceTransformer">
<resource>META-INF/spring.factories</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>${start-class}</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>



我需要所有这些插件吗?在pom中没有遗传的 pluginManagement ...是不必要的吗?我需要什么呢?


完成 pom.xml之后,我修改了主类,并在其中添加了第二行:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JpaConfig.class);
ApplicationContext ctx = SpringApplication.run(SpringBootApp.class, args);



现在有两种情况。可以开始,是的,但是我不确定这是否有用。我不想两次配置所有内容。因此,如何修改我的 JpaConfig类以同时配置spring boot。并继续:如何只修改一次主类中的两行?也许使用 SpringApplication.run并为其提供 JpaConfig类?但是构造函数不允许这样做。
当我以所有修改启动此当前项目时,独立地可能搜索了hibernate和/或jpa和/或spring注释,并两次执行了bild操作,我收到此错误:

org.springframework.beans.factory.BeanDefinitionStoreException:无法处理配置类[myProject.dependency.spring.javaOnly.springBoot.SpringBootApp]的导入候选对象;嵌套异常为java.lang.IllegalArgumentException:在META-INF / spring.factories中找不到自动配置类。如果您使用的是自定义包装,请确保该文件正确无误。
// ...
原因:java.lang.IllegalArgumentException:在META-INF / spring.factories中找不到自动配置类。如果您使用的是自定义包装,请确保该文件正确无误。


我不太确定这是在告诉我什么,因为我在 spring.factories中创建了 META-INF,并且在编译时,在 spring.factories文件夹中甚至还有两个 META-INF。我自己创建的一个,编译器创建的一个。并且无论我在 spring.factories文件夹中有两个还是只有一个 META-INF,错误仍然相同。
但是也许当其他两个问题解决后,这个问题就会解决。因此,非常感谢您的时间和耐心等待这篇漫长的帖子以及我可能很愚蠢的问题。但是,我希望您了解我仍在学习并尽我最大的努力,而且几天以来这些问题对我来说是无法解决的。因此,感谢您的任何提示或帮助。

最佳答案

我的建议是将您现有的spring项目集成到spring boot项目中,因为该spring boot使用基于完整spring的基础架构(尤其是自动配置)构建。




标准spring boot项目仅需要spring-boot-maven-plugin插件-doc
这里不需要AnnotationConfigApplicationContextSpringApplication类提供了一种方便的方法来引导将从main()方法启动的Spring应用程序。在许多情况下,您可以仅委托给静态SpringApplication.run方法

ApplicationContext ctx = SpringApplication.run(SpringBootApp.class,args);
Spring Boot建议您在其他类之上的根包中找到主应用程序类(SpringBootApp)。春季启动将在此处将@ComponentScan与默认的根包一起应用,因此它将默认加载您的JpaConfig,并且在这里不需要@ComponentScan(basePackages = {"myProject"}),但这取决于您项目中的包定义。
META-INF/spring.factories用于注册所有自动配置类,如果不需要自定义的自动配置类,则可以删除此文件或将此文件级别为空。


一路好走。

关于java - 将Spring Boot集成到独立的现有Spring Jar中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39948174/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com