[英]Is it possible to use jars built using spring xml as libraries inside a spring boot project?
[英]Spring Boot project using Old Spring Jars/Project | Not able to initiate
需要新的 Spring Boot 項目。
需要包含現有 Spring (Non Boot) 項目的 Jar,因為它有一個我們需要使用的 bean(那里編寫了很多代碼,因此無法將其移動到引導)
@Service("ctdbservice")
我在 Spring Boot 中包含了現有 jar 的依賴項。
以下是現有項目的現有 spring 非啟動項目的 pom:
project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.hcccsc.aom2</groupId>
<artifactId>am2-parent</artifactId>
<version>BC20.10-SNAPSHOT</version>
<relativePath>../am2-parent</relativePath>
</parent>
<artifactId>am2-read-write-cts3-impl</artifactId>
<packaging>jar</packaging>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<defaultGoal>clean install</defaultGoal>
</build>
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>am2-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>am2-reference-impl</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>am2-model</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>am2-cts3-model</artifactId>
<version>${project.version}</version>
<exclusions>
<exclusion>
<artifactId>am2-cts3-data-model</artifactId>
<groupId>${project.groupId}</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>am2-read-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>am2-write-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>am2-read-cts2-impl</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>am2-search-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>am2-search-cts3-impl</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.javers</groupId>
<artifactId>javers-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
我已經在我的 Spring Boot Maven 中包含了上面的內容。 但是 Spring boot 並沒有啟動這個 JAR 的 bean。
Spring Boot 可以在其上下文中正確加載舊 jars 嗎? 舊 jar 中的 pom 文件不會影響,因為它引用了某些父級的 spring 版本以及使用相同版本的 jars? 還是這些 jars 只使用 spring boot 添加的依賴項?
誰能建議我在哪里做錯了?
所以我猜@Autowired 不能正常工作,對嗎?
您需要對 JAR 的包進行組件掃描,例如:
@Configuration
@ComponentScan("com.package.where.my.class.is")
class Config {
...
}
可能會出現兩類不同的可能問題。
任何特定版本的 Spring Boot 都使用非常特定版本的依賴項(當然包括 spring)。 因此,首先要確保在生成的工件中沒有依賴項版本的沖突。 如果這樣做 - 它可能會導致意外和不需要的行為 - 啟動錯誤等等。
Spring boot 將檢測主類的包,比如com.example.myapp
(這是用@SpringBootApplication
注釋的類所在的位置),它會嘗試在com.example.myapp
(同一個包)和com.example.myapp.*
找到 bean com.example.myapp.*
(層次結構: com.example.myapp.abc
也可以),但如果您的服務不在這些路徑之一中,它將不會被識別為 bean。
一般來說,您可以使用三種方法:
方法 1:在@Configuration
類上使用@ComponentScan
注釋,因為 @Milgo 已經在您的 Spring Boot 應用程序中建議。 把這個類放在哪里並不重要,spring 是一個運行時框架。
方法 2:在服務模塊中創建一個 @Configuration 類,該類將再次查看並使用@Import
批注將其導入 Spring Boot 應用程序中
方法三:使用spring.factories
並再次指定配置。 不同之處在於,這種方式不會在組件掃描過程中找到該類,而是在“工廠”掃描期間被解析。
效果是在你的 spring 啟動應用程序中指定一個 maven 依賴項就足夠了,它會“自動神奇地”加載你的 bean。 您可以在此處閱讀有關此方法的信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.