我有一个带有@Scheduled方法的Springboot应用程序。我希望将其打包,以便其他需要我功能的应用程序可以简单地将其添加到其POM中,并自动运行@Scheduled方法,而无需进行任何代码更改(配置除外)。
通过Springboot可以做到吗?我宁愿不创建父项目,而将其作为依赖项。谢谢!
编辑:我已经将Springboot应用程序导出为Jar并导入到本地,但是@Scheduled方法从不运行。
答案 0 :(得分:1)
要创建自己的库,只需创建一个单独的标准java maven项目,然后将您的公共类放入其中。确保不在其中放置带有@SpringBootApplication的类(当然可以这样做,但是为了简单起见,让它保持这种样子)。
您的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>
请注意,此pom 请勿使用spring-boot-maven-plugin ,因此它将作为标准jar构建。
接下来,要在Spring Boot应用程序中使用它,只需将其添加为普通依赖项即可。
<dependency>
<groupId>com.my.own</groupId>
<artifactId>my-own-utils</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
然后,要使您的Spring Boot应用程序处理库中使用的注释,必须在应用程序的Main类中使用@ComponentScan
注释,以便它还可以在库包中搜索类:
@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);
}
}
这时,在启动时,spring应用程序将在包括您的库在内的完整类路径上查找其自己的包以及com.my.own
包的bean和组件,并根据其注释实例化它们。
如果您想控制应用程序实例化的内容(假设您的库有5个@Component类,但您只想使用其中的一个),则可以使用@ConditionalOnProperty
批注。