java 基于配置文件的Sping Boot 启用/禁用Tomcat或Kafka消费者

dm7nw8vv  于 2023-02-11  发布在  Java
关注(0)|答案(1)|浏览(194)
    • bounty将在6天后过期**。回答此问题可获得+50声望奖励。Anjanaa希望引起更多人关注此问题。

我正在编写一个SpringBoot应用程序,其中包含几个@Configuration类,用于rest API和Kafka消费者/生产者,具体取决于它选择初始化哪个@Profile。
第一个配置类使用REST接口,我添加了这些依赖项,这将启动一个嵌入式Tomcat示例并运行良好。
这里的问题是其他配置文件不应该旋转一个tomcat服务器,它应该只作为一个Kafka消费者。
有没有办法阻止@SpringBootApplication根据概要文件启动Tomcat?
我创建了2个配置类,一个用于Kafka,一个用于rest端点,并为每个配置类添加了@Profile注解。有人能指导我如何从应用中停止spin tomcat吗?

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.0.RELEASE</version>
</parent>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-jdbc</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

主要用途:

@SpringBootApplication
@Import(value = {RestScanConfiguration.class, KafkaScanConfiguration.class})
public class MainApp {

    public static void main(final String[] args) {
        SpringApplication.run(MainApp.class, args);
    }
}

REST扫描配置类:

@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = "package.app.rest")
@Profile("!kafka")
public class RestScanConfiguration {
}

KafkaScan配置类:

@Configuration
@EnableAutoConfiguration(
        exclude = {
                DataSourceAutoConfiguration.class,
                HibernateJpaAutoConfiguration.class,
                ElasticsearchDataAutoConfiguration.class
        })
@ComponentScan(basePackages = {"package.app.kafka"})
@Profile("kafka")
public class KafkaScanConfiguration {
}

有人能给我指点一下吗?
如何停止在Kafka消费者/生产者配置文件中旋转tomcat服务器。任何帮助都将不胜感激。

w6lpcovy

w6lpcovy1#

首先,您必须在starter类中禁用嵌入式Tomcat的自动配置,以避免部署Tomcat:

@SpringBootApplication(exclude = {EmbeddedServletContainerAutoConfiguration.class, 
                                  WebMvcAutoConfiguration.class})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

然后将以下属性添加到您的Kafka配置(非Rest配置文件):

spring.main.web-environment=false

现在,您已经禁用了集成Tomcat在Spring Boot 时的自动部署。现在,将以下配置添加到您的Rest配置文件以启用Tomcat(仅适用于此配置文件):

@Profile({"REST"})
@Configuration
// importing EmbeddedServletContainerAutoConfiguration delays the autoconfiguration until the profile load into context
@Import(EmbeddedServletContainerAutoConfiguration.class)
public class HttpConfiguration {
    // ...
}

之后你动态地配置了你的Kafka,你可以在Control enabling/disabling Kafka consumers in Spring Boot中找到一个解决方案

相关问题