From c36929b090877a90afbc78a85909e2382428e238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dhji=28=EC=A7=80=EB=8C=80=ED=95=9C=29?= Date: Wed, 10 Jan 2024 00:18:28 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20jpa=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 28 ++++++++ app/kac-app/build.gradle | 4 +- .../palnet/kac/app/config/KacJpaConfig.java | 65 +++++++++++++++++++ .../main/resources/application-database.yml | 7 ++ .../src/main/resources/application.yml | 32 +++++++++ .../main/resources/log4jdbc.log4j2.properties | 2 + docker-compose.yml | 4 +- 7 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 README.md create mode 100644 app/kac-app/src/main/java/kr/co/palnet/kac/app/config/KacJpaConfig.java create mode 100644 app/kac-app/src/main/resources/application-database.yml create mode 100644 app/kac-app/src/main/resources/application.yml create mode 100644 app/kac-app/src/main/resources/log4jdbc.log4j2.properties diff --git a/README.md b/README.md new file mode 100644 index 0000000..8485e4c --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# Spec + +## 환경 구성 + +### 기본 정보 + +- java 21 +- spring boot 3.2.1 +- jpa +- mysql + + + + +## 설정 정보 + +### log4jdbc.log4j2.properties 속성 + +| 속성 | 설명 | +|--------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------| +| log4jdbc.spylogdelegator.name | 로그4jdbc에서 사용할 로그 델리게이트(Delegate)의 이름을 지정합니다. 이 구성을 통해 로그 델리게이트를 변경할 수 있습니다. 이 코드에서는 SLF4J를 사용하는 net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator가 지정되어 있습니다. | +| log4jdbc.dump.sql.maxlinelength | SQL문의 최대 길이를 지정합니다. 이 속성은 SQL문을 자동 줄 바꿈하는 데 사용됩니다. 이 코드에서는 0으로 설정되어 있으므로 SQL문의 길이에 제한이 없습니다. | +| log4jdbc.spylogdelegator.name | 로그4jdbc에서 사용할 로그 델리게이트(Delegate)의 이름을 지정합니다. 이 구성을 통해 로그 델리게이트를 변경할 수 있습니다. 이 코드에서는 SLF4J를 사용하는 net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator가 지정되어 있습니다. | +| log4jdbc.dump.sql.maxlinelength | SQL문의 최대 길이를 지정합니다. 이 속성은 SQL문을 자동 줄 바꿈하는 데 사용됩니다. 이 코드에서는 0으로 설정되어 있으므로 SQL문의 길이에 제한이 없습니다. | +| log4jdbc.auto.load.popular.drivers | 자주 사용되는 드라이버를 자동으로 로드할지 여부를 지정합니다. 이 코드에서는 true로 설정되어 있습니다. | +| log4jdbc.trim.sql.enabled | SQL 문의 앞뒤 공백을 자동으로 제거할지 여부를 지정합니다. 이 코드에서는 true로 설정되어 있습니다. | +| log4jdbc.trim.sql.extrablanklines | SQL 문의 공백 라인을 제거할지 여부를 지정합니다. 이 코드에서는 false로 설정되어 있습니다. | +| log4jdbc.suppress.generated.keys.exception | SQL 문에서 생성된 키 예외를 억제할지 여부를 지정합니다. 이 코드에서는 false로 설정되어 있습니다. \ No newline at end of file diff --git a/app/kac-app/build.gradle b/app/kac-app/build.gradle index 7ea7590..e53a513 100644 --- a/app/kac-app/build.gradle +++ b/app/kac-app/build.gradle @@ -2,7 +2,9 @@ dependencies { implementation "$boot:spring-boot-starter-web" - runtimeOnly 'com.mysql:mysql-connector-j' + // db + runtimeOnly "com.mysql:mysql-connector-j" + implementation "org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:1.16" implementation "$boot:spring-boot-starter-data-jpa" compileOnly project(":data-user") diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/config/KacJpaConfig.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/config/KacJpaConfig.java new file mode 100644 index 0000000..7454d56 --- /dev/null +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/config/KacJpaConfig.java @@ -0,0 +1,65 @@ +package kr.co.palnet.kac.app.config; + +import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties; +import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings; +import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.transaction.PlatformTransactionManager; + +import javax.sql.DataSource; +import java.util.Map; +import java.util.Objects; + +@Configuration +@EnableJpaRepositories( + basePackages = "kr.co.palnet.kac.data.*.repository", + entityManagerFactoryRef = "kacEntityManagerFactory", + transactionManagerRef = "kacTransactionManager" +) +public class KacJpaConfig { + + private final JpaProperties jpaProperties; + private final HibernateProperties hibernateProperties; + + public KacJpaConfig(JpaProperties jpaProperties, HibernateProperties hibernateProperties) { + this.jpaProperties = jpaProperties; + this.hibernateProperties = hibernateProperties; + } + + @Bean(name = "kacDataSource") + @Primary + @ConfigurationProperties(prefix = "spring.datasource.pav-kac") + public DataSource kacDataSource() { + return DataSourceBuilder.create().build(); + } + + @Bean(name = "kacEntityManagerFactory") + @Primary + public LocalContainerEntityManagerFactoryBean kacEntityManagerFactory(EntityManagerFactoryBuilder builder) { + Map prop = hibernateProperties.determineHibernateProperties( + jpaProperties.getProperties(), + new HibernateSettings() + ); + + return builder.dataSource(kacDataSource()) + .properties(prop) + .packages("kr.co.palnet.kac.data.**.model") + .persistenceUnit("kac") + .build(); + } + + @Bean + @Primary + public PlatformTransactionManager kacTransactionManager(EntityManagerFactoryBuilder builder) { + return new JpaTransactionManager(Objects.requireNonNull(kacEntityManagerFactory(builder).getObject())); + } + +} diff --git a/app/kac-app/src/main/resources/application-database.yml b/app/kac-app/src/main/resources/application-database.yml new file mode 100644 index 0000000..00e5c87 --- /dev/null +++ b/app/kac-app/src/main/resources/application-database.yml @@ -0,0 +1,7 @@ +spring: + datasource: + pav-kac: + driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy + jdbc-url: jdbc:log4jdbc:mysql://localhost:13306/PAV_KAC?characterEncoding=UTF-8&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true + username: kac + password: palnet!234 \ No newline at end of file diff --git a/app/kac-app/src/main/resources/application.yml b/app/kac-app/src/main/resources/application.yml new file mode 100644 index 0000000..d695a2a --- /dev/null +++ b/app/kac-app/src/main/resources/application.yml @@ -0,0 +1,32 @@ +spring: + profiles: + include: + - database + threads: + virtual: + enabled: true + jpa: + hibernate: + ddl-auto: create + naming: + physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl + +logging: + level: + com: + zaxxer: + hikari: INFO + jdbc: + audit: OFF + resultset: OFF + resultsettable: INFO #SQL 결과 데이터 Table을 로그로 남긴다. + sqlonly: OFF #SQL만 로그로 남긴다. + sqltiming: INFO #SQL과 소요시간을 표기한다. + connection : OFF # 커넥션 확인가능 + org: + hibernate: + SQL: DEBUG + type: + descriptor: + sql: + BasicBinder: TRACE \ No newline at end of file diff --git a/app/kac-app/src/main/resources/log4jdbc.log4j2.properties b/app/kac-app/src/main/resources/log4jdbc.log4j2.properties new file mode 100644 index 0000000..8f18407 --- /dev/null +++ b/app/kac-app/src/main/resources/log4jdbc.log4j2.properties @@ -0,0 +1,2 @@ +log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator +log4jdbc.dump.sql.maxlinelength=0 diff --git a/docker-compose.yml b/docker-compose.yml index 04523dd..4162694 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,9 +4,11 @@ services: image: mysql container_name: kac-db environment: - - MYSQL_DATABASE=PAV_KAC - MYSQL_ROOT_HOST=% - MYSQL_ROOT_PASSWORD=palnet!234 + - MYSQL_DATABASE=PAV_KAC + - MYSQL_USER=kac + - MYSQL_PASSWORD=palnet!234 ports: - 13306:3306 volumes: