Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 在spring boot app中将web应用程序类型设置为“无”时未发送电子邮件_Spring Boot - Fatal编程技术网

Spring boot 在spring boot app中将web应用程序类型设置为“无”时未发送电子邮件

Spring boot 在spring boot app中将web应用程序类型设置为“无”时未发送电子邮件,spring-boot,Spring Boot,我有一个cron作业,它执行一些操作,并在异常情况下发送电子邮件。我遇到了一个问题,当我有 spring.main.web-application-type=NONE 设置在我的application.properties文件中,但删除后我可以接收电子邮件 我需要上面的属性来启动应用程序每天的cron。如果我删除此属性,应用程序将第一次正常运行,并在以后执行时抛出以下错误 Address already in use org.apache.catalina.LifecycleException

我有一个cron作业,它执行一些操作,并在异常情况下发送电子邮件。我遇到了一个问题,当我有

spring.main.web-application-type=NONE
设置在我的application.properties文件中,但删除后我可以接收电子邮件

我需要上面的属性来启动应用程序每天的cron。如果我删除此属性,应用程序将第一次正常运行,并在以后执行时抛出以下错误

Address already in use
org.apache.catalina.LifecycleException: Failed to initialize component [Connector[org.apache.coyote.http11.Http11NioProtocol-9090]]
我必须杀死PID来手动重新处理它

这里有什么问题?我如何通过在我的应用程序属性文件中保留上述属性来接收电子邮件

下面是我的application.properties文件

app.environment=DEV
server.port=9090
spring.main.web-application-type=NONE

spring.datasource.jdbc-url=jdbc:sqlserver://xxx;databaseName=xxx
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.validation-query=select 1
spring.datasource.testOnBorrow=true

smtpHost=test.com
username=emailagent@test.com
password=user
smtpPort=25
error.email.to=myemail@test.com
error.email.from=admin@test.com
我的gradle文件

 plugins {
   id 'org.springframework.boot' version '2.1.6.RELEASE'
   id 'java'
}

apply plugin: 'io.spring.dependency-management'
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'jacoco'
apply plugin: 'checkstyle'
apply plugin: 'jdepend'

sourceCompatibility = 1.11

bootJar {
   baseName = 'my-cron-app'
}

repositories {
   mavenCentral()
} 

dependencies {
  compile('org.springframework.boot:spring-boot-starter-data-jpa')
  compile('org.springframework.boot:spring-boot-starter-web')
  compile('org.springframework.boot:spring-boot-starter-mail')

compile('org.springframework.boot:spring-boot-starter-jdbc') {
    exclude group: 'org.apache.tomcat', module: 'tomcat-jdbc'
}

compile('org.apache.commons:commons-lang3:3.5')

compile('org.apache.commons:commons-collections4:4.0')
compile group: 'net.sf.jt400', name: 'jt400-jdk8', version: '9.5'
compile('org.apache.httpcomponents:httpclient:4.3.4')
compileOnly 'org.projectlombok:lombok'
runtime('com.microsoft:sqljdbc4:4.0')

testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test'
testCompile group: 'junit', name: 'junit'
}
我使用logback.xml文件来配置放置在jar文件外面的电子邮件属性

我使用的crontab startup.sh文件

echo "Starting the app now"
source ~/.bashrc
cd /dev/my-cron-app/
nohup /opt/jdk-11.0.2/bin/java -Xmx768m -Xms256m -Dlogging.config=/dev/my-cron-app/logback.xml -jar 
/dev/my-cron-app/my-cron-app.jar --spring.profiles.active=dev &> logs/console.log&

我能知道我错过了什么吗?提前感谢

如果没有
spring.main.web应用程序type=NONE
设置,spring Boot会将应用程序配置为在嵌入式Tomcat容器中运行。应用程序将启动,Tomcat将无限期地侦听web请求,直到您停止应用程序。如您所见,第二次尝试运行应用程序将导致端口9090上出现端口冲突

使用
spring.main.web应用程序type=NONE
设置,spring Boot将不会启动嵌入式Tomcat容器,应用程序可能会在启动完成后立即退出


您的问题缺少关于如何编写执行处理和发送电子邮件的主要应用程序逻辑以及如何调用该逻辑的重要细节。如果您希望应用程序启动、处理并在完成后退出,那么您应该考虑使用
ApplicationRunner
CommandLineRunner
实现处理,如中所示。

最后,我能够找出问题所在。这听起来很奇怪,在我的电子邮件触发代码之后不久,我不得不在应用程序关闭前延迟几秒钟。我认为,由于实体管理器和连接池立即关闭,该电子邮件传递过程不知何故被中止。对我来说这听起来很奇怪,但它起了作用