[2021-04-07 수] TIL

노을·2021년 6월 8일
0

TIL

목록 보기
69/81

Sprint Data JDBC, MySQL 연동


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> {
}

Docker에 MySQL 설치하기


Docker 초기화

도커에 MySQL 설치 및 실행

로컬 Docker MySQL 계정정보

도커에서 MySQL 컨테이너 run 이 잘되지 않아서 생각보다 많이 애먹었다.

어찌저찌 해결은 했지만 아직도 정확하게 이해하지 못해서 추후 각잡고 도커 학습이 필요하다.

profile
카르페디엠

0개의 댓글