2016-10-26 14 views
-1

多くの時間を調査し、適切な解決策が見つからない場合、私は今誰かが私を助けてくれることを願っています。Spring Boot Jarがデータベースにアクセスできない - NullPointerException

私は、MySQLデータベースにアクセスするSpringブートアプリケーションを作成します。

私は

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からアプリケーションを起動すると、なぜこの例外が発生するのか分かりません。

なぜjarファイル内のデータベースからの設定にアクセスできないのですか?

+0

@Tunakiあなたは説明することができます、なぜそれは他の質問の正確なコピーですか?私の質問は、なぜアプリケーションをjarファイルとして実行するとNullPointerExceptionが発生するのですか?私がMavenでそれを実行すると、それは動作します。 – Waysti

+0

あなたはそれを正確にコピーしたと思いますか?あなたのアプリケーションで何かが 'null'であれば、それを見つけてあなたのアプリケーションをデバッグする必要があります。この質問の情報で誰かがあなたを助けることは不可能です。この例外の原因と解決策を見つけるにはリンクされた質問を参照してください。 – Tunaki

+0

申し訳ありませんが、正確な複製はコピーしません。私のせい。私は 'ヌル'が何であるか知っています。設定オブジェクトは 'null'です。アプリケーションを起動すると、ConfigurationをロードしてConfigurationオブジェクトに格納します。その後、新しいトークンが作成されます。そのためには設定オブジェクトが必要です。だから 'mvn spring-boot:run'ではデータベースからデータを取得しますが、' mvn clean package'でパッケージ化し、 'java -jar trms-1.0-SNAPHOT.jar'として実行しますデータベースから。だから、おそらく他に何かをやるの? – Waysti

答えて

0

configurationオブジェクトがnullのように見えますか?おそらく、Mavenを実行するときにjarを実行するときに同じ引数を渡していないでしょうか?

+0

java -jar trms-1.0-SNAPSHOT.jar – Waysti

関連する問題