Browse Source

chore: jpa 설정

pull/1/head
지대한 8 months ago
parent
commit
c36929b090
  1. 28
      README.md
  2. 4
      app/kac-app/build.gradle
  3. 65
      app/kac-app/src/main/java/kr/co/palnet/kac/app/config/KacJpaConfig.java
  4. 7
      app/kac-app/src/main/resources/application-database.yml
  5. 32
      app/kac-app/src/main/resources/application.yml
  6. 2
      app/kac-app/src/main/resources/log4jdbc.log4j2.properties
  7. 4
      docker-compose.yml

28
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로 설정되어 있습니다.

4
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")

65
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<String, Object> 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()));
}
}

7
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

32
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

2
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

4
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:

Loading…
Cancel
Save