実現したいこと
Spring Frameworkを使用したWebアプリを作成しています。
アプリケーションの起動時に勝手に何回も起動してしまいます。
そのため1回起動したら再起動しないようにコードを修正したいです。
発生している問題・分からないこと
実現したいことと同じ
エラーメッセージ
error
1Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-224]
該当のソースコード
pom.xml
1<?xml version="1.0" encoding="UTF-8"?> 2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>3.2.1</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.example</groupId> 12 <artifactId>CreateMemoApp</artifactId> 13 <version>0.0.1-SNAPSHOT</version> 14 <name>CreateMemoApp</name> 15 <description>Demo project for Spring Boot</description> 16 <properties> 17 <java.version>17</java.version> 18 </properties> 19 <dependencies> 20 <dependency> 21 <groupId>org.springframework.boot</groupId> 22 <artifactId>spring-boot-starter-security</artifactId> 23 </dependency> 24 <dependency> 25 <groupId>org.springframework.boot</groupId> 26 <artifactId>spring-boot-starter-thymeleaf</artifactId> 27 </dependency> 28 <dependency> 29 <groupId>org.springframework.boot</groupId> 30 <artifactId>spring-boot-starter-validation</artifactId> 31 </dependency> 32 <dependency> 33 <groupId>org.springframework.boot</groupId> 34 <artifactId>spring-boot-starter-web</artifactId> 35 </dependency> 36 <dependency> 37 <groupId>org.thymeleaf.extras</groupId> 38 <artifactId>thymeleaf-extras-springsecurity6</artifactId> 39 </dependency> 40 41 <dependency> 42 <groupId>org.springframework.boot</groupId> 43 <artifactId>spring-boot-devtools</artifactId> 44 <scope>runtime</scope> 45 <optional>true</optional> 46 </dependency> 47 <dependency> 48 <groupId>org.projectlombok</groupId> 49 <artifactId>lombok</artifactId> 50 <optional>true</optional> 51 </dependency> 52 <dependency> 53 <groupId>org.springframework.boot</groupId> 54 <artifactId>spring-boot-starter-test</artifactId> 55 <scope>test</scope> 56 </dependency> 57 <dependency> 58 <groupId>org.springframework.security</groupId> 59 <artifactId>spring-security-test</artifactId> 60 <scope>test</scope> 61 </dependency> 62 <dependency> 63 <groupId>org.springframework.boot</groupId> 64 <artifactId>spring-boot-starter-data-jpa</artifactId> 65 </dependency> 66 <dependency> 67 <groupId>com.h2database</groupId> 68 <artifactId>h2</artifactId> 69 <scope>runtime</scope> 70 </dependency> 71 </dependencies> 72 73 <build> 74 <plugins> 75 <plugin> 76 <groupId>org.springframework.boot</groupId> 77 <artifactId>spring-boot-maven-plugin</artifactId> 78 <configuration> 79 <excludes> 80 <exclude> 81 <groupId>org.projectlombok</groupId> 82 <artifactId>lombok</artifactId> 83 </exclude> 84 </excludes> 85 </configuration> 86 </plugin> 87 </plugins> 88 </build> 89 90</project> 91
DataLoader.java
1package com.example.demo.config; 2 3import org.springframework.boot.ApplicationArguments; 4import org.springframework.boot.ApplicationRunner; 5import org.springframework.security.crypto.password.PasswordEncoder; 6import org.springframework.stereotype.Component; 7 8import com.example.demo.model.Account; 9import com.example.demo.repository.UserRepository; 10 11import lombok.RequiredArgsConstructor; 12 13@RequiredArgsConstructor 14@Component 15public class DataLoader implements ApplicationRunner{ 16 17 private final PasswordEncoder passwordEncoder; 18 private final UserRepository userRepository; 19 20 @Override 21 public void run(ApplicationArguments args) throws Exception { 22 //adminユーザを作成 23 var user = new Account(); 24 25 user.setUsername("admin"); 26 user.setPassword(passwordEncoder.encode("Password1")); 27 user.setEmail("test@test"); 28 29 30 userRepository.save(user); 31 } 32 33} 34
MemoAppController.java
1package com.example.demo.controller; 2 3import org.springframework.security.core.Authentication; 4import org.springframework.security.crypto.password.PasswordEncoder; 5import org.springframework.stereotype.Controller; 6import org.springframework.ui.Model; 7import org.springframework.validation.BindingResult; 8import org.springframework.validation.annotation.Validated; 9import org.springframework.web.bind.annotation.GetMapping; 10import org.springframework.web.bind.annotation.ModelAttribute; 11import org.springframework.web.bind.annotation.PostMapping; 12 13import com.example.demo.model.Account; 14import com.example.demo.repository.UserRepository; 15 16import lombok.RequiredArgsConstructor; 17 18@RequiredArgsConstructor 19@Controller 20public class MemoAppController { 21 22 private final UserRepository userRepository; 23 private final PasswordEncoder passwordEncoder; 24 25 @GetMapping("/") 26 public String showList(Authentication loginUser, Model model) { 27 model.addAttribute("username", loginUser.getName()); 28 model.addAttribute("authority", loginUser.getAuthorities()); 29 return "memo"; 30 } 31 32 @GetMapping("/registerUser") 33 public String registerUser(@ModelAttribute("user") Account user) { 34 return "registerUser"; 35 } 36 37 @PostMapping("/registerUser") 38 public String process(@Validated @ModelAttribute("user") Account user, 39 BindingResult result,Model model) { 40 41 if(result.hasErrors()) { 42 return "registerUser"; 43 } 44 //パスワードをエンコードし、ユーザを登録 45 user.setPassword(passwordEncoder.encode(user.getPassword())); 46 userRepository.save(user); 47 48 model.addAttribute("username", user.getUsername()); 49 50 return "redirect:/memo"; 51 } 52 53 @GetMapping("/editUser") 54 public String editUser() { 55 return "editUser"; 56 } 57 58 @GetMapping("/login") 59 public String login() { 60 return "login"; 61 } 62 63 @GetMapping("/top") 64 public String top() { 65 return "top"; 66 } 67 68 @GetMapping("/editMemo") 69 public String editMemo() { 70 return "editMemo"; 71 } 72 73} 74
Account.java
1package com.example.demo.model; 2 3import com.example.demo.validator.UniqueLogin; 4 5import jakarta.persistence.Entity; 6import jakarta.persistence.Id; 7import jakarta.validation.constraints.Email; 8import jakarta.validation.constraints.NotBlank; 9import jakarta.validation.constraints.Pattern; 10import jakarta.validation.constraints.Size; 11import lombok.Getter; 12import lombok.Setter; 13 14@Getter 15@Setter 16@Entity 17public class Account { 18 //必須入力、文字列が3文字以上12文字まで 19 @Id 20 @NotBlank 21 @Size(min = 3,max = 12) 22 @UniqueLogin 23 private String username; 24 25 //必須入力、Email形式であること、文字列が200文字まで 26 @NotBlank 27 @Email 28 @Size(max = 200) 29 private String email; 30 31 //必須入力、文字列が6文字以上60文字まで、半角英大文字小文字と数字を含む 32 @NotBlank 33 @Size(min = 6,max = 60) 34 @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$") 35 private String password; 36} 37
application.properties
1spring.datasource.url=jdbc:h2:mem:memoappdb;DB_CLOSE_ON_EXIT=FALSE 2spring.jpa.hibernate.ddl-auto=update 3spring.jpa.show-sql=true 4spring.datasource.username=sa 5spring.datasource.password= 6spring.datasource.driver-class-name=org.h2.Driver
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
再起動については以下のリンクも確認しましたが解決方法がどのファイルを変更すればよいか分からず解決できませんでした。
SpringBootアプリケーションが常に再起動し続ける(再起動ループ)
エラーコードについても、application.propertiesに追記しても再起動されました。。
補足
特になし
回答1件
あなたの回答
tips
プレビュー