Java 如何动态加载Spring控制器

Java 如何动态加载Spring控制器,java,spring,spring-boot,Java,Spring,Spring Boot,我有一个Spring引导应用程序,它承载一个RESTAPI 根据部署的文件,我希望能够让它从本质上是一个“插件”JAR文件加载额外的控制器 例如,我希望能够做这样的事情: java -jar myapp.jar -Dplugins.directory=/opt/myapp/plugins 这可能吗 注意:这些不会在运行中加载;一旦部署,插件集将保持不变。我想要一个在每次部署中都保持不变的应用程序jar,应用程序的行为将由部署在它旁边的插件决定。它可能无法100%满足您的需求。 我有两个建议 简

我有一个Spring引导应用程序,它承载一个RESTAPI

根据部署的文件,我希望能够让它从本质上是一个“插件”JAR文件加载额外的控制器

例如,我希望能够做这样的事情:

java -jar myapp.jar -Dplugins.directory=/opt/myapp/plugins
这可能吗


注意:这些不会在运行中加载;一旦部署,插件集将保持不变。我想要一个在每次部署中都保持不变的应用程序jar,应用程序的行为将由部署在它旁边的插件决定。

它可能无法100%满足您的需求。 我有两个建议

简单的一个。
java-jarstackoverflow-1.0-SNAPSHOT.jar--spring.profiles.active=prod
并在控制器上添加不同的值“@Profile”

@RestController
@Profile("prod")
public class URLOneController {

@PostMapping(value = "/url", consumes="application/json", produces="application/json")
public ResponseEntity<HttpStatus> insertClaim(@RequestBody String messageBody) {
    return new ResponseEntity<>(HttpStatus.OK);
}

}
abc-1.0-SNAPSHOT.jar和您的主应用程序中的额外控制器是stackoverflow-1.0-SNAPSHOT.jar

小贴士: stackoverflow-1.0-SNAPSHOT.jar应该打包成zip格式

<plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <layout>ZIP</layout>
            </configuration>
        </plugin>

org.springframework.boot
springbootmaven插件
拉链

它可能无法100%满足您的需求。 我有两个建议

简单的一个。
java-jarstackoverflow-1.0-SNAPSHOT.jar--spring.profiles.active=prod
并在控制器上添加不同的值“@Profile”

@RestController
@Profile("prod")
public class URLOneController {

@PostMapping(value = "/url", consumes="application/json", produces="application/json")
public ResponseEntity<HttpStatus> insertClaim(@RequestBody String messageBody) {
    return new ResponseEntity<>(HttpStatus.OK);
}

}
abc-1.0-SNAPSHOT.jar和您的主应用程序中的额外控制器是stackoverflow-1.0-SNAPSHOT.jar

小贴士: stackoverflow-1.0-SNAPSHOT.jar应该打包成zip格式

<plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <layout>ZIP</layout>
            </configuration>
        </plugin>

org.springframework.boot
springbootmaven插件
拉链

我认为这样的事情太聪明了一半。你必须重新启动应用程序才能加载插件。没有理由不能将它们作为依赖项添加到包中。请检查此项。这可能会有帮助:我认为这样的事情太聪明了一半。你必须重新启动应用程序才能加载插件。没有理由不能将它们作为依赖项添加到包中。请检查此项。这可能有助于: