Java 如何将一个Springboot应用程序打包成另一个Springboot应用程序中的操作依赖项
我有一个Springboot应用程序,它有一个@Scheduled方法。我希望以一种方式将其打包,使其他需要我的功能的应用程序可以简单地将其添加到它们的POM中,并自动运行@Scheduled方法,而无需进行任何代码更改(配置除外) 这可以通过Springboot实现吗?我宁愿不创建父项目,而是将其作为依赖项。谢谢Java 如何将一个Springboot应用程序打包成另一个Springboot应用程序中的操作依赖项,java,maven,spring-boot,Java,Maven,Spring Boot,我有一个Springboot应用程序,它有一个@Scheduled方法。我希望以一种方式将其打包,使其他需要我的功能的应用程序可以简单地将其添加到它们的POM中,并自动运行@Scheduled方法,而无需进行任何代码更改(配置除外) 这可以通过Springboot实现吗?我宁愿不创建父项目,而是将其作为依赖项。谢谢 编辑:我已将Springboot应用程序导出为Jar并在本地导入,但@Scheduled方法从未运行。要创建您自己的库,只需创建一个单独的标准java maven项目并将您的公共类放
编辑:我已将Springboot应用程序导出为Jar并在本地导入,但@Scheduled方法从未运行。要创建您自己的库,只需创建一个单独的标准java maven项目并将您的公共类放入其中。确保不将带有@springboot应用程序的类放入其中(确保可以这样做,但为了简单起见,让我们保持这样) 您的pom应该是:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.my.own</groupId>
<artifactId>my-own-utils</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>my-own-utils</name>
<description>My Own Spring Boot App Utilities</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- here you put your dependencies just as in a spring boot app. You can even use starters. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-sns</artifactId>
<version>1.11.301</version>
</dependency>
</dependencies>
</project>
此时,在启动时,spring应用程序将在包含库的完整类路径上查找自己包的bean和组件,以及com.my.own
包,并根据它们的注释实例化它们
如果您想控制应用程序实例化的内容(假设您的库有5个@Component类,但您只想使用一个),您可以使用
@ConditionalProperty
注释。1。您可以从spring boot应用程序2中导出一个jar。如果您不希望jar公开或使用central maven repository,则需要一些存储库管理器。3.在其他任何地方将其作为依赖项使用。尝试过此操作后,@Scheduled job根本不会运行。使用此依赖项的项目是否在其配置中启用了计划?我不希望向消费项目添加任何批注,但如果我可以更改application.properties配置,请告诉我。编辑:我已经尝试在应用程序类中添加@EnableScheduling,但没有任何更改。在我看来,决定是否启用调度应该是“消耗”项目责任。依赖项不应覆盖现有配置。在一个有很多依赖项的项目中,它会非常混乱。这是maven插件!取出它并执行mvn包
创建了一个可用于我的项目的jar
<dependency>
<groupId>com.my.own</groupId>
<artifactId>my-own-utils</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
@SpringBootApplication
@ComponentScan("com.my.own")
public class MainApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MainApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}