App.javaを実行すると
java.lang.NoClassDefFoundError: javax/validation/ValidationException (省略) at com.example.App.main(App.java:34) Caused by: java.lang.ClassNotFoundException: javax.validation.ValidationException java.lang.IllegalStateException: Failed to execute CommandLineRunner (省略) at com.example.App.main(App.java:34) Caused by: org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.lang.NullPointerException Caused by: java.lang.NullPointerException: null
というエラーメッセージがコンソールに出力され、正しく動作しません。
解決方法を教えていただきたいです。
App.java
package com.example; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import com.example.domain.Customer; import com.example.repository.CustomerRepository; import com.example.service.CustomerService; @EnableAutoConfiguration @ComponentScan public class App implements CommandLineRunner{ @Autowired CustomerService customerService; @Autowired NamedParameterJdbcTemplate jdbcTemplate; @Autowired CustomerRepository customerRepository; @Override public void run(String...strings)throws Exception { Customer created = customerRepository.save(new Customer(null,"Hidetoshi","Dekisugi")); System.out.print(created + "is created!"); customerRepository.findAll().forEach(System.out::println); } public static void main(String[] args) { SpringApplication.run(App.class, args); } }
AppConfig.java
package com.example; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import net.sf.log4jdbc.Log4jdbcProxyDataSource; import javax.sql.DataSource; @Configuration public class AppConfig { @Autowired DataSourceProperties datasourceProperties; DataSource datasource; @ConfigurationProperties(prefix = "spring.datasource") @Bean(destroyMethod = "close") DataSource realDataSource() { @SuppressWarnings("rawtypes") DataSourceBuilder factory = DataSourceBuilder .create(this.datasourceProperties.getClassLoader()) .url(this.datasourceProperties.getUrl()) .username(this.datasourceProperties.getUsername()) .password(this.datasourceProperties.getPassword()); this.datasource = factory.build(); return this.datasource; } @Primary @Bean Log4jdbcProxyDataSource datasource() { return new Log4jdbcProxyDataSource(this.datasource); } }
CustomorRepository.java
package com.example.repository; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.core.namedparam.SqlParameterSource; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import com.example.domain.Customer; @Repository @Transactional public class CustomerRepository { @Autowired NamedParameterJdbcTemplate jdbcTemplate; private static final RowMapper<Customer> customerRowMapper = (rs,i) ->{ Integer id = rs.getInt("id"); String firstName = rs.getString("first_name"); String lastName = rs.getString("last_name"); return new Customer(id, firstName, lastName); }; public List<Customer> findAll(){ List<Customer> Customers = jdbcTemplate.query("SELECT id,first_name FROM customers ORDERBY id", customerRowMapper); return Customers; } public Customer findOne(Integer id) { SqlParameterSource param = new MapSqlParameterSource().addValue("id", id); return jdbcTemplate.queryForObject("SELECT id,first_name,last_name FROM customers WHEREid =:id", param, customerRowMapper); } public Customer save(Customer customer) { SqlParameterSource param = new BeanPropertySqlParameterSource(customer); if(customer.getId() == null) { jdbcTemplate.update("INSERT INTO customers (first_name,last_name) values(:firstName, :lastName,)",param); }else { jdbcTemplate.update("UPDATE customers SET first_name =:first_name, last_name =:last_name WHERE is =:id",param); } return customer; } public void delete(Integer id) { SqlParameterSource param = new MapSqlParameterSource().addValue("id", id); jdbcTemplate.update("DELETE FROM customers WHERE id=:id",param); } }
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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>hajiboot-layering</artifactId> <version>1.0.0-SNAPSHOT</version> <name>hajiboot-layering</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.lazyluke</groupId> <artifactId>log4jdbc-remix</artifactId> <version>0.2.7</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web-services</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version><!--$NO-MVN-MAN-VER$--> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
>App.javaを実行すると
Spring Bootであればjavaを直接実行することにはならないかと思いますが、
どのような実行方法をとられているのでしょうか。
STSを使って実行しています!
いえ、ですから
当該エラーが発生するまでの手順です。
どうやって起動してどうやって確認しているのか
すみませんつい3日前ほどから勉強を始めたので、何を求められているのかが分かりません、、、
・プロジェクトはどうやって作りましたか
・ここまでコードを作った後、どのように起動しましたか
(ふつうはプロジェクト右クリック→Springアプリケーションで起動する)
・起動した後、どのように動作確認を行いましたか
(ふつうはブラウザからURLを打って実行する)
あと追加
・そもそもコントローラもVIEWもないですがどういうアプリケーションを作っているつもりですか
プロジェクトはSTS内のeclipseの機能を使用し、実行と作成を行っています。
実行方法は右クリックからspringアプリケーションで起動しています。
エラーメッセージはコンソールに出すようにしています。
JdbcTemplateを使ったリポジトリクラスの実装を行っているつもりです。
テキストに沿って作っているので詳しい構造は分かりません、すみません
起動したときのエラーですか?
動作確認時のエラーですか?
>テキストに沿って作っているので
ん-それだとどういうものを作ろうとしているのか、分からないので答えづらい部分がありますね。
「書籍」なら何かしら抜けてるんだろうし、「講義のテキスト」なら講師に聞くべきだし。
あと下記もお願いします。
--
・起動した後、どのように動作確認を行いましたか
(ふつうはブラウザからURLを打って実行する)
Springアプリケーションで実行した際にエラーが出ています。
アプリケーション起動時にエラーが出ているので、動作確認はまだ行っていません
なるほど、となるとエラーの通りですね。
(ただやはり「App.javaを実行」は表現として正しくないです)
回答1件
あなたの回答
tips
プレビュー