2016-10-26 2 views
-1

많은 시간을 연구하고 올바른 해결책을 찾지 못해서 누군가가 나를 도울 수 있기를 바랍니다.봄 부팅 Jar가 데이터베이스에 액세스 할 수 없습니다. - NullPointerException

MySQL 데이터베이스에 액세스하는 스프링 부팅 응용 프로그램을 만듭니다. 내가

mvn spring-boot:run 

그것을 실행하는 경우

모두 잘 작동합니다. 내가

mvn clean package 

사용하여 응용 프로그램을 패키지화하는 경우

는하지만 NullPointerException이 얻을 :

java.lang.IllegalStateException: Failed to execute CommandLineRunner 
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:803) [spring-boot-1.4.1.RELEASE.jar!/:1.4.1.RELEASE] 
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:784) [spring-boot-1.4.1.RELEASE.jar!/:1.4.1.RELEASE] 
    at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:771) [spring-boot-1.4.1.RELEASE.jar!/:1.4.1.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-1.4.1.RELEASE.jar!/:1.4.1.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186) [spring-boot-1.4.1.RELEASE.jar!/:1.4.1.RELEASE] 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175) [spring-boot-1.4.1.RELEASE.jar!/:1.4.1.RELEASE] 
    at de.conbord.trms.Application.main(Application.java:20) [classes!/:1.0-SNAPSHOT] 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_102] 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_102] 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_102] 
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_102] 
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [trms-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] 
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [trms-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] 
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [trms-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] 
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:58) [trms-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] 
Caused by: java.lang.NullPointerException: null 
    at de.conbord.trms.controller.TokenBuilder.createToken(TokenBuilder.java:17) ~[classes!/:1.0-SNAPSHOT] 
    at de.conbord.trms.api.CheckToken.createNewToken(CheckToken.java:66) ~[classes!/:1.0-SNAPSHOT] 
    at de.conbord.trms.api.CheckToken.checkValidToken(CheckToken.java:41) ~[classes!/:1.0-SNAPSHOT] 
    at de.conbord.trms.controller.TokenLoader.run(TokenLoader.java:41) ~[classes!/:1.0-SNAPSHOT] 
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:800) [spring-boot-1.4.1.RELEASE.jar!/:1.4.1.RELEASE] 
    ... 14 common frames omitted 

에서 응용 프로그램이 데이터베이스에 액세스 할 수 있다고 생각을, 나는 액세스 거부 오류가 발생하지 않는 원인, 그러나 그것의 자료를 얻을 수 없다. 여기에 완성도를 들어

, 내 pom.xml 파일

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>de.conbord</groupId> 
    <artifactId>trms</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.4.1.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> 

    <packaging>jar</packaging> 

    <dependencies> 
     <!-- Spring Boot JPA --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-rest</artifactId> 
     </dependency> 

     <!-- lombock --> 
     <dependency> 
      <groupId>org.projectlombok</groupId> 
      <artifactId>lombok</artifactId> 
      <version>1.16.8</version> 
     </dependency> 

     <!-- Thymeleaf --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-thymeleaf</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>com.h2database</groupId> 
      <artifactId>h2</artifactId> 
      <scope>runtime</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-devtools</artifactId> 
      <optional>false</optional> 
     </dependency> 
     <!-- Apache Commons --> 
     <dependency> 
      <groupId>commons-io</groupId> 
      <artifactId>commons-io</artifactId> 
      <version>2.5</version> 
     </dependency> 

     <!-- Spring Boot Security --> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
     </dependency> 

     <!-- MySQL Connector --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.40</version> 
     </dependency> 

     <dependency> 
      <groupId>joda-time</groupId> 
      <artifactId>joda-time</artifactId> 
      <version>2.9.4</version> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
       <version>1.4.1.RELEASE</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>repackage</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

     </plugins> 
    </build> 

</project> 

CheckToken.java

@Component 
public class CheckToken { 

    private final ConfigurationRepository repository; 
    private final TokenRepository tokenRepository; 
    private static final Logger log = LoggerFactory.getLogger(Application.class); 


    @Autowired 
    public CheckToken(ConfigurationRepository repository, TokenRepository tokenRepository) { 
     this.repository = repository; 
     this.tokenRepository = tokenRepository; 
    } 

    public void checkValidToken() { 
     Configuration configuration = this.repository.findByUserName("ADI"); 
     Token token = this.tokenRepository.findOne(1L); 
     if (token == null) { 
      token = createNewToken(configuration); 
      this.tokenRepository.save(token); 
     } else { 
      Long tokenId = token.getId(); 

      Pattern pattern = Pattern.compile("(\\d+)"); 
      Matcher matcher = pattern.matcher(token.getValidTo()); 
      if (matcher.find()) { 
       Long endDate = Long.parseLong(matcher.group(1)); 

       Date tokenEndDate = new Date(endDate); 
       Date currentDate = Calendar.getInstance().getTime(); 

       if (currentDate.after(tokenEndDate)) { 
        TokenBuilder tokenBuilder = new TokenBuilder(); 
        token = tokenBuilder.createToken(configuration); 
        token.setId(tokenId); 
        this.tokenRepository.save(token); 
       } 
      } 
     } 
    } 

    private Token createNewToken(Configuration configuration) { 
     TokenBuilder tokenBuilder = new TokenBuilder(); 
     Token token = tokenBuilder.createToken(configuration); 
     token.setId(1L); 
     return token; 
    } 
} 

TokenBuilder.java

package de.conbord.trms.controller; 

import de.conbord.trms.entity.Configuration; 
import de.conbord.trms.entity.Token; 
import org.springframework.http.HttpEntity; 
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; 
import org.springframework.util.LinkedMultiValueMap; 
import org.springframework.util.MultiValueMap; 
import org.springframework.web.client.RestTemplate; 

public class TokenBuilder { 

    public Token createToken(Configuration configuration) { 
     String authString = "SIP sip_username=" + configuration.getUserName() 
      + " sip_password=" + configuration.getUserPasswort() 
      + " sip_database=" + configuration.getDbName() 
      + " app_key=" + configuration.getAppGUID(); 
     String jsonObject = "{\"AppliesTo\":\"localhost:808/staffitprowebAPI/\", \"TokenType\":\"http://staffITpro.com/tokens/staffITproSecurityToken/type\"}"; 
     String url = configuration.getUrl() + "Token/"; 

     MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); 
     headers.add("Accept", "application/json"); 
     headers.add("Content-Type", "application/json"); 
     headers.add("Authorization", authString); 

     RestTemplate restTemplate = new RestTemplate(); 
     restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 

     HttpEntity<String> request = new HttpEntity<>(jsonObject, headers); 

     return restTemplate.postForObject(url, request, Token.class); 
    } 
} 

구성 개체가 데이터베이스에 저장됩니다.

그래서 지금 jar에서 응용 프로그램을 시작하면 왜이 예외가 발생하는지 이해할 수 없습니다.

왜 병에서 데이터베이스의 구성에 액세스 할 수 없습니까?

+0

@ Tunaki 당신이 설명 할 수있는 이유는 그것이 다른 질문의 정확한 사본입니까? 내 질문은 왜 응용 프로그램을 jar 파일로 실행할 때 NullPointerException이 발생하는지입니다. Maven을 실행하면 작동합니다. – Waysti

+0

당신은 그것을 정확히 어디에서 읽었습니까? 뭔가 응용 프로그램에서'null', 당신은 무엇인지 찾아야하고, 응용 프로그램을 디버깅해야합니다. 이 질문에있는 정보로 누군가가 당신을 도울 수는 없습니다. 이 예외의 원인과 해결책을 찾으려면 링크 된 질문을 참조하십시오. – Tunaki

+0

죄송합니다, 정확한 duplicat 복사하지 마십시오. 내 잘못. 나는 'null'이 무엇인지 압니다. 설정 객체는'null'입니다. 응용 프로그램을 시작하면 구성을로드하고 구성 개체에 저장합니다. 그런 다음 새 토큰을 만듭니다. 그리고이를 위해서는 Configuration Object가 필요합니다. 그래서'mvn spring-boot : run'으로 데이터베이스로부터 데이터를 얻습니다.하지만'mvn clean package'로 패키징하고 jar'java -jar trms-1.0-SNAPHOT.jar'로 실행하면 얻을 수 없습니다. 데이터베이스에서. 어쩌면 메이븐 (maven)이 그 외에 무엇인가 할 수 있을까요? – Waysti

답변

0

configuration 개체가 null 인 것처럼 보입니까? 아마 당신은 항아리를 실행할 때 메이븐이 그것을 실행할 때와 같은 인자를 전달하지 않을 것입니까?

+0

난 인수없이 항아리를 실행합니다. java -jar trms-1.0-SNAPSHOT.jar – Waysti

관련 문제