关于 spring boot 用gradle打包 war后运行的问题

刘青峰 2019-07-02 04:03:46
2-Jul-2019 16:00:10.516 严重 [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Error during ServletContainerInitializer processing
javax.servlet.ServletException: Failed to instantiate WebApplicationInitializer class
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:155)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5267)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1140)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1875)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.InstantiationException: io.j99.app.measure.Application
at java.lang.Class.newInstance(Unknown Source)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:152)
... 12 more
Caused by: java.lang.NoSuchMethodException: io.j99.app.measure.Application.<init>()
at java.lang.Class.getConstructor0(Unknown Source)
... 14 more

02-Jul-2019 16:00:10.516 严重 [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal Context [/measure-0.0.1] startup failed due to previous errors
02-Jul-2019 16:00:10.562 警告 [localhost-startStop-1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [measure-0.0.1] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
02-Jul-2019 16:00:10.562 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [D:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\measure-0.0.1] has finished in [5,484] ms
02-Jul-2019 16:00:10.562 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [D:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\ROOT]
02-Jul-2019 16:00:10.734 信息 [36] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading Illegal access: this web application instance has been stopped already. Could not load []. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load []. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1364)
at org.apache.catalina.loader.WebappClassLoaderBase.getResource(WebappClassLoaderBase.java:1021)
at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.checkContextClassLoaders(AbandonedConnectionCleanupThread.java:96)
at com.mysql.cj.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:69)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

用gradle打包 war后 放入tomcat运行 报错
不知道是那个问题导致的 我运行没错 想问问各位大佬
...全文
241 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
maradona1984 2019-07-03
  • 打赏
  • 举报
回复
io.j99.app.measure.Application这个类存在多个版本?
maradona1984 2019-07-03
  • 打赏
  • 举报
回复
而且我觉得,你的lambrd表达式的代码如此多,还是老老实实写成一个实现类比较好 因为IDE一般都有找接口实现类的快捷方式,但应该没有找匿名实现类的快捷方式(或许是我不知道),作为一门严谨的语言,可读性是非常重要的,如果连代码都找不到,那自然不存在可读性,lambrd表达式内容太多把其语法糖的优点完全抹掉了,甚至不如写个匿名类看起来直观 这是我一个小小的建议
刘青峰 2019-07-03
  • 打赏
  • 举报
回复
引用 7 楼 maradona1984 的回复:
[quote=引用 6 楼 刘青峰 的回复:] [quote=引用 5 楼 maradona1984 的回复:] Caused by: java.lang.NoSuchMethodException: io.j99.app.measure.Application.<init>() 大概是初始化spring的bean的时候调用了init方法,但你的方法是有参的,spring调用的却是无参的 可能需要看下源码到底发生了什么
那第一个错误是什么情况  javax.servlet.ServletException: Failed to instantiate WebApplicationInitializer class 这里是和servlet 的jar 有关吗、 https://stackoverflow.com/questions/33222441/how-to-solve-failed-to-instantiate-webapplicationinitializer-class 这有个例子和这差不多[/quote] 你都写代码到这个程度,应该对java的异常机制有一定的了解了 看异常只看最里面那个,其他的异常都是try catch到最根本的那个异常然后包装再抛出/打印出来的,毫无意义,你对tomcat的源码一无所知的话,就不用看,因为外层异常几乎都是这个,因为springmvc/springboot其实就是一个servlet,他的初始化异常那自然最终都会在tomcat初始化servlet的那段代码捕获然后输出出来 或者只看跟你代码相关的异常,这是最简单的判断规则 [/quote] 我菜鸟来的 大佬帮帮忙
刘青峰 2019-07-03
  • 打赏
  • 举报
回复
引用 7 楼 maradona1984 的回复:
[quote=引用 6 楼 刘青峰 的回复:] [quote=引用 5 楼 maradona1984 的回复:] Caused by: java.lang.NoSuchMethodException: io.j99.app.measure.Application.<init>() 大概是初始化spring的bean的时候调用了init方法,但你的方法是有参的,spring调用的却是无参的 可能需要看下源码到底发生了什么
那第一个错误是什么情况  javax.servlet.ServletException: Failed to instantiate WebApplicationInitializer class 这里是和servlet 的jar 有关吗、 https://stackoverflow.com/questions/33222441/how-to-solve-failed-to-instantiate-webapplicationinitializer-class 这有个例子和这差不多[/quote] 你都写代码到这个程度,应该对java的异常机制有一定的了解了 看异常只看最里面那个,其他的异常都是try catch到最根本的那个异常然后包装再抛出/打印出来的,毫无意义,你对tomcat的源码一无所知的话,就不用看,因为外层异常几乎都是这个,因为springmvc/springboot其实就是一个servlet,他的初始化异常那自然最终都会在tomcat初始化servlet的那段代码捕获然后输出出来 或者只看跟你代码相关的异常,这是最简单的判断规则 [/quote] 我打jar 不会报错,打war就出错
maradona1984 2019-07-03
  • 打赏
  • 举报
回复
引用 6 楼 刘青峰 的回复:
[quote=引用 5 楼 maradona1984 的回复:] Caused by: java.lang.NoSuchMethodException: io.j99.app.measure.Application.<init>() 大概是初始化spring的bean的时候调用了init方法,但你的方法是有参的,spring调用的却是无参的 可能需要看下源码到底发生了什么
那第一个错误是什么情况  javax.servlet.ServletException: Failed to instantiate WebApplicationInitializer class 这里是和servlet 的jar 有关吗、 https://stackoverflow.com/questions/33222441/how-to-solve-failed-to-instantiate-webapplicationinitializer-class 这有个例子和这差不多[/quote] 你都写代码到这个程度,应该对java的异常机制有一定的了解了 看异常只看最里面那个,其他的异常都是try catch到最根本的那个异常然后包装再抛出/打印出来的,毫无意义,你对tomcat的源码一无所知的话,就不用看,因为外层异常几乎都是这个,因为springmvc/springboot其实就是一个servlet,他的初始化异常那自然最终都会在tomcat初始化servlet的那段代码捕获然后输出出来 或者只看跟你代码相关的异常,这是最简单的判断规则
刘青峰 2019-07-03
  • 打赏
  • 举报
回复
引用 5 楼 maradona1984 的回复:
Caused by: java.lang.NoSuchMethodException: io.j99.app.measure.Application.<init>() 大概是初始化spring的bean的时候调用了init方法,但你的方法是有参的,spring调用的却是无参的 可能需要看下源码到底发生了什么
那第一个错误是什么情况  javax.servlet.ServletException: Failed to instantiate WebApplicationInitializer class 这里是和servlet 的jar 有关吗、 https://stackoverflow.com/questions/33222441/how-to-solve-failed-to-instantiate-webapplicationinitializer-class 这有个例子和这差不多
maradona1984 2019-07-03
  • 打赏
  • 举报
回复
Caused by: java.lang.NoSuchMethodException: io.j99.app.measure.Application.<init>() 大概是初始化spring的bean的时候调用了init方法,但你的方法是有参的,spring调用的却是无参的 可能需要看下源码到底发生了什么
刘青峰 2019-07-03
  • 打赏
  • 举报
回复
引用 2 楼 maradona1984 的回复:
io.j99.app.measure.Application这个类存在多个版本?
上面就是Application 的代码 只有一个啊 不存在多个Application启动类
刘青峰 2019-07-03
  • 打赏
  • 举报
回复
引用 2 楼 maradona1984 的回复:
io.j99.app.measure.Application这个类存在多个版本?


package io.j99.app.measure;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Predicate;
import com.tencent.xinge.XingeApp;
import io.j99.app.measure.db.*;
import io.j99.app.measure.db.model.*;
import io.j99.app.measure.db.model.Package;
import io.j99.app.measure.properties.*;
import io.j99.app.measure.properties.storage.LocalStorageProperties;
import io.j99.app.measure.properties.storage.QiniuStorageProperties;
import io.j99.app.measure.service.DeviceService;
import io.j99.app.measure.service.MessageService;
import io.j99.app.measure.storage.StorageService;
import io.j99.app.measure.utils.Md5;
import io.j99.app.measure.utils.RandomUtils;
import io.swagger.annotations.Api;
import org.json.JSONArray;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.client.RestTemplate;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.builders.ResponseMessageBuilder;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.Contact;
import springfox.documentation.service.ResponseMessage;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.web.ApiKeyVehicle;
import springfox.documentation.swagger.web.SecurityConfiguration;
import springfox.documentation.swagger.web.UiConfiguration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;

import static com.google.common.base.Predicates.or;
import static com.google.common.collect.Lists.newArrayList;
import static springfox.documentation.builders.PathSelectors.regex;

@SpringBootApplication
@Configuration
//@ComponentScan("io.j99.app.measure")

@EnableSwagger2
@EnableConfigurationProperties({
        QiniuStorageProperties.class,
        LocalStorageProperties.class,
        AlipayProperties.class,
        AppConfigProperties.class,
        XGProperties.class,
        BaiduProperties.class,
        WXProperties.class,
        YunPianProperties.class})
@EnableJpaRepositories(repositoryFactoryBeanClass = CustomJpaRepositoryFactoryBean.class)
@EnableScheduling
public class Application extends SpringBootServletInitializer {
    Logger logger = LoggerFactory.getLogger(Application.class);
    @Autowired
    private Environment environment;
    @Autowired
    private PackageRepository packageRepository;
    @Autowired
    private AdminRepository adminRepository;
    @Autowired
    private DeviceService deviceService;
    @Autowired
    private MessageService messageService;
    @Autowired
    private UserRepository userRepository;
    @Autowired
    private AccountRepository accountRepository;
    @Autowired
    private ResourceLoader resourceLoader;
    @Autowired
    private ObjectMapper objectMapper;
    //    @Autowired
    private XGProperties xgProperties;
    @Autowired
    private ExpertRepository expertRepository;

    @Autowired
    public Application(XGProperties xgProperties) {
        this.xgProperties = xgProperties;
    }

    @Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate();
        List<HttpMessageConverter<?>> converters = restTemplate.getMessageConverters();
        restTemplate.setMessageConverters(converters);
        return restTemplate;
    }

    @Bean
    public XingeApp xingeApp() {
        return new XingeApp(xgProperties.getId(), xgProperties.getSecret());
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

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

    @Autowired
    private AppConfigProperties appConfigProperties;
    @Autowired
    private ConfigRepository configRepository;

    @Bean
    CommandLineRunner init(StorageService storageService) {
        return (args) -> {
            ImageIO.scanForPlugins();
            String profile = environment.getProperty("profile");
            if (!"prod".equalsIgnoreCase(profile)) {
//                loadTestDevice();
//                initTestErrorCode();
//                initTestExport();
                logger.info(appConfigProperties.toString());
            }
            logger.info("Profile name: " + profile);
            logger.info("Database Url: " + environment.getProperty("spring.datasource.url"));
            logger.info("Redis Host: " + environment.getProperty("spring.redis.host"));
            if (adminRepository.count() <= 0) {
                Admin admin = new Admin();
                admin.setName("admin");
                String password;
                if (!"prod".equalsIgnoreCase(profile)) {
                    password = "111111";
                } else {
                    password = UUID.randomUUID().toString().replaceAll("-", "");

                }
                admin.setPassword(password);
                admin.setInitPasswrd(true);
                String salt = RandomUtils.randText(4).toUpperCase();
                String encode = Md5.encode(admin.getPassword() + salt);
                admin.setPassword(salt + encode);
                adminRepository.save(admin);
                logger.info("==================================================");
                logger.info("Init Admin Account:" + admin.getName());
                logger.info("Init Admin Password:" + password);
                logger.info("==================================================");
            }
            if (packageRepository.count() <= 0) {
                Iterable<Package> packages = packageRepository.save(newArrayList(
                        new Package(PackageType.POINT, 10, "10个", 10f),
                        new Package(PackageType.POINT, 100, "100个", 9.99f),
                        new Package(PackageType.POINT, 1000, "1000个", 99.98f),
                        new Package(PackageType.MEASURE, 1, "包月套餐", 0.01f),
                        new Package(PackageType.MEASURE, 3, "季度套餐", 0.01f),
                        new Package(PackageType.MEASURE, 6, "半年套餐", 0.01f),
                        new Package(PackageType.MEASURE, 12, "包年套餐", 0.01f),
                        new Package(PackageType.MEASURE, 999, "永久套餐", 0.01f).setPermanent(true)
                ));
                for (Package pck : packages) {
                    logger.info("init add package: " + pck.toString());
                }
            }
            List<String> asEmail = appConfigProperties.getAsEmail();
            List<String> csEmail = appConfigProperties.getCsEmail();
            List<String> asPhone = appConfigProperties.getAsPhone();
            List<String> csPhone = appConfigProperties.getCsPhone();
            String integralDesc = appConfigProperties.getIntegralDesc();
            String demoAddr = appConfigProperties.getDemoAddr();
            String inviteUrl = appConfigProperties.getInviteUrl();
            String shopUrl = appConfigProperties.getShopUrl();
            if (configRepository.findByName("asEmail") == null) {
                Config entity = new Config();
                entity.setName("asEmail");
                entity.setContent(new JSONArray(asEmail).toString());
                configRepository.save(entity);
            }
            if (configRepository.findByName("csEmail") == null) {
                Config entity = new Config();
                entity.setName("csEmail");
                entity.setContent(new JSONArray(csEmail).toString());
                configRepository.save(entity);
            }
            if (configRepository.findByName("asPhone") == null) {
                Config entity = new Config();
                entity.setName("asPhone");
                entity.setContent(new JSONArray(asPhone).toString());
                configRepository.save(entity);
            }
            if (configRepository.findByName("csPhone") == null) {
                Config entity = new Config();
                entity.setName("csPhone");
                entity.setContent(new JSONArray(csPhone).toString());
                configRepository.save(entity);
            }
            if (configRepository.findByName("integralDesc") == null) {
                Config entity = new Config();
                entity.setName("integralDesc");
                entity.setContent(integralDesc);
                configRepository.save(entity);
            }
            if (configRepository.findByName("demoAddr") == null) {
                Config entity =
刘青峰 2019-07-02
  • 打赏
  • 举报
回复

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
//apply plugin: 'spring-boot'

//apply plugin: 'watch'
apply plugin: 'war'
war {
    baseName = 'measure'
    version = '0.0.1'
}
/*apply plugin: 'idea'
idea {
    module {
        inheritOutputDirs = false
        outputDir = file("$buildDir/classes/main/")
    }
}*/
repositories {
    maven { url "http://maven.aliyun.com/nexus/content/repositories/public/" }
    maven { url "http://repo.spring.io/libs-snapshot" }
}

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

sourceCompatibility = 1.8
targetCompatibility = 1.8
springBoot {
    executable = true
}
configurations {
    // providedRuntime
     dev
}
/*jar {
    mainClass = "io.j99.app.measure.Application"
}*/
dependencies {
    compile("commons-logging:commons-logging:1.2")
    compile("javax.servlet:javax.servlet-api:4.0.1")

//
     compile group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: '9.0.8'
    compile("org.springframework.boot:spring-boot-devtools")
    //


    compile group: 'org.springframework.boot', name: 'spring-boot-dependencies', version: '2.2.0.M4'
   compile group: 'org.springframework.boot', name: 'spring-boot-maven-plugin', version: '2.2.0.M4'


    ///
     compile ("org.springframework.boot:spring-boot-dependencies")
     compile ("org.springframework.boot:spring-boot-maven-plugin")
    ///

    ////
    compile group: 'cn.org.faster', name: 'spring-boot-starter-parent', version: '1.1.1.RELEASE'
    compile ("org.springframework.boot:spring-boot-starter-tomcat")
    compile ("org.springframework.boot:spring-boot-starter-web")
    compile ("org.springframework.boot:spring-boot-devtools")


    //
    compile "org.springframework.boot:spring-boot-configuration-processor"
    compile("mysql:mysql-connector-java:8.0.12")
    ///
    compile fileTree(dir: 'libs', include: ['*.jar'])
   // dev("org.springframework.boot:spring-boot-devtools")
    testCompile("org.springframework.boot:spring-boot-starter-test")
    compile "io.springfox:springfox-swagger2:2.5.0"
    compile("org.springframework.session:spring-session")
    compile("org.simpleframework:simple-xml:2.7")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    compile("org.springframework.boot:spring-boot-starter-data-redis")
    compile("org.springframework.boot:spring-boot-starter-data-rest")
    compile 'io.jsonwebtoken:jjwt:0.6.0'
//    compile("org.springframework.boot:spring-boot-starter-data-mongodb")
    compile("org.springframework.boot:spring-boot-starter-jdbc")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("org.springframework.boot:spring-boot-starter-actuator")
   // compile("mysql:mysql-connector-java")
    compile("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.6.0")
    compile 'com.squareup.retrofit2:retrofit:2.1.0'
    compile 'com.squareup.retrofit2:converter-jackson:2.1.0'
    compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
    compile 'com.squareup.okhttp3:logging-interceptor:3.1.2'
    compile 'com.squareup.okhttp3:okhttp:3.1.2'
    compile("org.springframework.boot:spring-boot-starter-web")
    compile('commons-net:commons-net:3.5')
    compile('com.googlecode.log4jdbc:log4jdbc:1.2')
// https://mvnrepository.com/artifact/org.apache.poi/poi
    compile group: 'org.apache.poi', name: 'poi', version: '3.15'
    compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.15'
// https://mvnrepository.com/artifact/commons-lang/commons-lang
    compile group: 'commons-lang', name: 'commons-lang', version: '2.6'
    compile 'com.qiniu:qiniu-java-sdk:7.2.2'
    // https://mvnrepository.com/artifact/org.apache.ant/ant
    compile group: 'org.apache.ant', name: 'ant', version: '1.10.1'

}
bootRun {
    // addResources = true
   classpath = sourceSets.main.runtimeClasspath + configurations.dev
}

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧