Основной метод весеннего загрузочного приложения выполняется дважды -> порт уже используется - PullRequest
0 голосов
/ 25 февраля 2020

Я впервые настраиваю приложение с весенней загрузкой с нуля, и в течение двух дней у меня был кошмар с этой проблемой. Когда я пытаюсь запустить приложение, похоже, что оно пытается запустить дважды, и каждый раз, когда я получаю сообщение об ошибке, порт уже используется, но процесс не останавливается, и если я пытаюсь вызвать конечную точку с почтальоном, он работает.

Вот вывод консоли:

Starting Gradle Daemon...
Connected to the target VM, address: '127.0.0.1:61857', transport: 'socket'
Gradle Daemon started in 1 s 473 ms
> Task :processResources UP-TO-DATE
> Task :compileJava UP-TO-DATE
> Task :classes UP-TO-DATE
Connected to the VM started by ':VcrawlPortalBackendApplication.main()' (localhost:61879). Open the debugger session tab

> Task :VcrawlPortalBackendApplication.main()

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.4.RELEASE)

2020-02-25 15:48:19.817  INFO 471912 --- [  restartedMain] c.v.v.VcrawlPortalBackendApplication     : Starting VcrawlPortalBackendApplication on VOQCLUJWEBTS with PID 471912 
2020-02-25 15:48:19.822 DEBUG 471912 --- [  restartedMain] c.v.v.VcrawlPortalBackendApplication     : Running with Spring Boot v2.2.4.RELEASE, Spring v5.2.3.RELEASE
2020-02-25 15:48:19.823  INFO 471912 --- [  restartedMain] c.v.v.VcrawlPortalBackendApplication     : The following profiles are active: dev
2020-02-25 15:48:22.237 DEBUG 471912 --- [  restartedMain] c.v.v.config.DatabaseConfiguration       : Configuring Datasource
.........
2020-02-25 15:48:25.065  INFO 471912 --- [  restartedMain] c.v.v.VcrawlPortalBackendApplication     : Started VcrawlPortalBackendApplication in 6.273 seconds (JVM running for 6.994)

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.4.RELEASE)

2020-02-25 15:48:25.178  INFO 471912 --- [  restartedMain] c.v.v.VcrawlPortalBackendApplication     : Starting VcrawlPortalBackendApplication on VOQCLUJWEBTS with PID 471912 
2020-02-25 15:48:25.179 DEBUG 471912 --- [  restartedMain] c.v.v.VcrawlPortalBackendApplication     : Running with Spring Boot v2.2.4.RELEASE, Spring v5.2.3.RELEASE
2020-02-25 15:48:25.179  INFO 471912 --- [  restartedMain] c.v.v.VcrawlPortalBackendApplication     : The following profiles are active: dev
2020-02-25 15:48:25.765 DEBUG 471912 --- [  restartedMain] c.v.v.config.DatabaseConfiguration       : Configuring Datasource
2020-02-25 15:48:25.904  INFO 471912 --- [  restartedMain] c.v.v.VcrawlPortalBackendApplication     : Running with Spring profile(s) : [dev]
2020-02-25 15:48:26.166 ERROR 471912 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Web server failed to start. Port 8187 was already in use.

Action:

Identify and stop the process that's listening on port 8187 or configure this application to listen on another port.

Все эти журналы работают одновременно.

Это мой файл build.gradle:

plugins {
id 'org.springframework.boot' version '2.2.4.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
id 'war'
}

bootWar {
    mainClassName = 'com.voquz.vcrawlportalbackend.VcrawlPortalBackendApplication'
    excludeDevtools = true
}

springBoot {
    mainClassName = 'com.voquz.vcrawlportalbackend.VcrawlPortalBackendApplication'
}

bootRun {
    sourceResources sourceSets.main

    if (System.getProperty('DEBUG', 'false') == 'true') {
        jvmArgs '-Xdebug',
                '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=9009'
    }
}

if (project.hasProperty('prod')) {
    apply from: 'profile_prod.gradle'
} else if (project.hasProperty('uat')) {
    apply from: 'profile_uat.gradle'
} else {
    apply from: 'profile_dev.gradle'
}

group = 'com.voquz.vcrawl-portal-backend'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation ('org.springframework.boot:spring-boot-starter-web') {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
    }
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.liquibase:liquibase-core'
    implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate4'
    implementation 'org.hibernate:hibernate-core'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    testImplementation 'org.springframework.security:spring-security-test'
    compile group: 'com.microsoft.sqlserver', name: 'mssql-jdbc', version: '8.2.0.jre8'
    compile 'com.github.sabomichal:liquibase-mssql:1.5'
    compile group: 'com.hynnet', name: 'sqljdbc-chs', version: '4.0.2206.100'
}

compileJava.dependsOn(processResources)

clean {
    delete "target"
}

task stage(dependsOn: 'bootRepackage') {
}

Вот файл build.gradle для профиля разработки:

ext {
    logbackLoglevel = "DEBUG"
}

dependencies {
    compile group: 'org.springframework.boot', name: 'spring-boot-devtools'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat', version: '2.2.4.RELEASE'
}

bootRun {
    args = ["--spring.profiles.active=dev"]
}

task setProdProperties(dependsOn: bootRun) {
    doFirst {
        System.setProperty('spring.profiles.active', 'dev')
    }
}

processResources {
    filesMatching('**/logback-spring.xml') {
        filter {
            it.replace('@logback.loglevel@', logbackLoglevel)
        }
    }
}

И основной класс:

@SpringBootApplication
@EnableConfigurationProperties({LiquibaseProperties.class})
public class VcrawlPortalBackendApplication {

    private static final Logger log = LoggerFactory.getLogger(VcrawlPortalBackendApplication.class);

    @Autowired
    private Environment environment;

    public static void main(String[] args) throws UnknownHostException {
        SpringApplication app = new SpringApplication(VcrawlPortalBackendApplication.class);
        SimpleCommandLinePropertySource source = new SimpleCommandLinePropertySource(args);
        addDefaultProfile(app, source);
        SpringApplication.run(VcrawlPortalBackendApplication.class, args);
        Environment env = app.run(args).getEnvironment();
        log.info("Access URLs:\n----------------------------------------------------------\n\t" +
                        "Local: \t\thttp://127.0.0.1:{}\n\t" +
                        "External: \thttp://{}:{}\n----------------------------------------------------------",
                env.getProperty("server.port"),
                InetAddress.getLocalHost().getHostAddress(),
                env.getProperty("server.port"));

    }

    /**
     * If no profile has been configured, set by default the "dev" profile.
     */
    private static void addDefaultProfile(SpringApplication app, SimpleCommandLinePropertySource source) {
        if (!source.containsProperty("spring.profiles.active") &&
                !System.getenv().containsKey("SPRING_PROFILES_ACTIVE")) {

            app.setAdditionalProfiles(Constants.SPRING_PROFILE_DEVELOPMENT);
        }
    }

    @PostConstruct
    public void initApplication() {
        if (environment.getActiveProfiles().length == 0) {
            log.warn("No Spring profile configured, running with default configuration");
        } else {
            log.info("Running with Spring profile(s) : {}", Arrays.toString(environment.getActiveProfiles()));
            Collection<String> activeProfiles = Arrays.asList(environment.getActiveProfiles());
            if (activeProfiles.contains(Constants.SPRING_PROFILE_DEVELOPMENT) && activeProfiles.contains(Constants.SPRING_PROFILE_PRODUCTION)) {
                log.error("You have misconfigured your application! " +
                        "It should not run with both the 'dev' and 'prod' profiles at the same time.");
            }
            if (activeProfiles.contains(Constants.SPRING_PROFILE_DEVELOPMENT) && activeProfiles.contains(Constants.SPRING_PROFILE_UAT)) {
                log.error("You have misconfigured your application! " +
                        "It should not run with both the 'dev' and 'uat' profiles at the same time.");
            }
            if (activeProfiles.contains(Constants.SPRING_PROFILE_PRODUCTION) && activeProfiles.contains(Constants.SPRING_PROFILE_UAT)) {
                log.error("You have misconfigured your application! " +
                        "It should not run with both the 'prod' and 'uat' profiles at the same time.");
            }
        }
    }

}

Я думаю, что есть проблема с моей сборкой файлы, но пока не удалось найти решение. Кто-нибудь когда-нибудь сталкивался с такой же проблемой? Есть идеи для решения? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2020

Вы дважды вызываете метод SpringApplication::run stati c.

Сначала используете SpringApplication.run(VcrawlPortalBackendApplication.class, args); и их из вашего инициализированного SpringApplication экземпляра Environment env = app.run(args).getEnvironment();

0 голосов
/ 25 февраля 2020

Ваше приложение уже приступило к выполнению на порту 8187. Так как вы установили двойной вызов метода run, он снова пытается запустить выполнение на порту 8187. Решение -> удалить повторяющийся вызов функции run.

enter image description here

...