簡體   English   中英

使用 Old Spring Jars/Project 的 Spring Boot 項目 | 無法發起

[英]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 {
...
}

請參閱如何@Autowire 從外部 jar 創建的 spring bean?

可能會出現兩類不同的可能問題。

  1. 任何特定版本的 Spring Boot 都使用非常特定版本的依賴項(當然包括 spring)。 因此,首先要確保在生成的工件中沒有依賴項版本的沖突。 如果這樣做 - 它可能會導致意外和不需要的行為 - 啟動錯誤等等。

  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM