Java Spring Bootで基本的なCRUD機能の練習用アプリに画像アップロード機能も実装したくて下記URLのチュートリアルを読んでいるのですが、つまづいている所があります。
https://www.callicoder.com/spring-boot-file-upload-download-jpa-hibernate-mysql-database-example/
このチュートリアルの
#Configuring the Database and Multipart File properties
という項目でDatabaseとMultipart file propertiesをConfigureする必要があると書かれており、チュートリアルの記述を自分のapplication.propertiesファイルに追加したらコンフリクトが生じてしまいました。
下記がそのapplication.propertiesファイルの中身です。
(##で始まる## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties以降の記述がチュートリアルからコピペしたもの、それより上が元々あった記述です)
spring.datasource.url=jdbc:h2:mem:test spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.h2.console.enabled=true ## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties) spring.datasource.url= jdbc:mysql://localhost:3306/file_demo?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false spring.datasource.username= root spring.datasource.password= callicoder ## Hibernate Properties # The SQL dialect makes Hibernate generate better SQL for the chosen database spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.hibernate.ddl-auto = update ## Hibernate Logging logging.level.org.hibernate.SQL= DEBUG ## MULTIPART (MultipartProperties) # Enable multipart uploads spring.servlet.multipart.enabled=true # Threshold after which files are written to disk. spring.servlet.multipart.file-size-threshold=2KB # Max file size. spring.servlet.multipart.max-file-size=200MB # Max Request Size spring.servlet.multipart.max-request-size=215MB
Configurationでコンフリクトを起こしているのは下記の4行分です。
spring.datasource.url=jdbc:h2:mem:test spring.datasource.username=sa spring.datasource.url= jdbc:mysql://localhost:3306/file_demo?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false spring.datasource.username= root
コンフリクトを起こしているのはJDBC H2 databaseとJDBC MySQLを同時に使おうとしているからでしょうか。最初は下記のように自分の元のConfigurationの記述をコメントアウトして、チュートリアルのもので完全に上書きすれば問題解決すると思っていたのですが、
#spring.datasource.url=jdbc:h2:mem:test #spring.datasource.driverClassName=org.h2.Driver #spring.datasource.username=sa #spring.h2.console.enabled=true
この状態でプログラムを実行しようしてもできませんでした。たぶんH2のConfiguration部分をコメントアウトしたのに下記コードのようにJDBC Templateを使おうとしている箇所が存在するからだと思います。
#[ReportDaoImpl.java]
package com.example.demo.repository; import java.sql.Timestamp; @Repository public class ReportDaoImpl implements ReportDao { private final JdbcTemplate jdbcTemplate; @Autowired public ReportDaoImpl(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } @Override public List<Report> findAll() { String sql = "SELECT report_id, title, threat_level, report_date, description, img_path, " + "user.user_id, user_name FROM report " + "INNER JOIN user ON report.user_id = user.user_id"; List<Map<String, Object>> resultList = jdbcTemplate.queryForList(sql); ……
ここで気になるのは、どうやったらConfigurationのコンフリクトを起こさずに冒頭URLのチュートリアルの画像アップロードの機能を組み込めるのか?という事です。
このチュートリアルの画像アップロード機能を組み込もうとしている時点で、そもそもJDBC H2 Databaseを使おうとしているのが間違いで、JDBC Templateの代わりに何か他の方法でDatabaseのデータにアクセスするというやり方になるように、根本的にReportDaoImpl.javaのファイルを書き換えないといけないのでしょうか?それとも、もっと単純にConfigurationコンフリクトを解消する方法はあるのでしょうか?
回答1件
あなたの回答
tips
プレビュー