application.properties
# MySQL 설정
spring.datasource.url=jdbc:mysql://localhost:3306/todoDB?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=noel
spring.datasource.password=1234
spring.datasource.initialization-mode=always
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
SimpleJdbcConfig.java
@Configuration
@EnableJdbcRepositories
public class SimpleJdbcConfig extends AbstractJdbcConfiguration {
final Environment env;
@Autowired // 생략 가능, 명시적으로 사용했음.
public SimpleJdbcConfig(Environment env) {
this.env = env;
}
@Bean
public DataSource mySqlDataSource() {
return DataSourceBuilder.create().
url(env.getProperty("spring.datasource.url"))
.username(env.getProperty("spring.datasource.username"))
.password(env.getProperty("spring.datasource.password"))
.driverClassName(env.getProperty("spring.datasource.driver-class-name"))
.build();
}
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(mySqlDataSource());
}
@Bean
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(DataSource mySqlDataSource) {
return new NamedParameterJdbcTemplate(mySqlDataSource);
}
}
MySQL을 사용하면, ApplicationContext나 getBean()
은 사용하지 않는건가?? 스프링을 아직 잘몰라서 이해하기 어렵다. 나중에 찾아보자.
ApiUserController.java
@RestController
@RequestMapping("/users")
public class ApiUserController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final UserRepository userRepository;
// ApplicationContext ctx = new AnnotationConfigApplicationContext(SimpleJdbcConfig.class);
// UserRepository repo = (UserRepository) ctx.getBean("userRepository");
@Autowired
public ApiUserController(UserRepository userRepository) {
this.userRepository = userRepository;
}
@GetMapping("/create")
public User create() {
User user = new User();
user.setName("Hoyoung Jung2");
User savedUser = userRepository.save(user);
logger.debug("saved: {}", savedUser);
User u1 = userRepository.findById(1L).get();
logger.debug("user with id=1: {}", u1);
return u1;
}
@GetMapping("/2")
public User search(){
User u1 = userRepository.findById(2L).get();
return u1;
}
}
UserRepository.java
public interface UserRepository extends CrudRepository<User, Long> {
}
도커에서 MySQL 컨테이너 run
이 잘되지 않아서 생각보다 많이 애먹었다.
어찌저찌 해결은 했지만 아직도 정확하게 이해하지 못해서 추후 각잡고 도커 학습이 필요하다.