새 프로젝트 생성

11버전으로 시작

버전 낮춰서 생성하면 그래들이 자동으로 다운로드 된다.
다운이 완료되면 구성편집 확인! 자동으로 들어갈 것이다.


https://mvnrepository.com/
메이븐 레포지토리에서 spring-core를 찾아서 다운

build.gradle안의 dependencies에 넣어준다.
복사해서 context랑 test도

변경 로드 해준다.
자바 클래스에서 반복적으로 작성되는 getter setter toString 생성자 코드 등의 소스들을 Annotation을 사용해 생략할 수 있도록 컴파일 시점에 자동으로 생성해주는 라이브러리.

플러그인에 거의 다 설정이 되어있다.
https://mvnrepository.com/artifact/org.projectlombok/lombok/1.18.24

https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/2.17.2

https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl/1.2

resource 폴더에 log4j2.xml 파일 만들어준다.

(사진은 폴더를 잘못 만들었으나 main아래에 있는 거에 xml만 넣으면됨.)
그리고 밑에 넣어주기.
<configuration status="INFO">
<Appenders>
<!-- 콘솔 -->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout charset="UTF-8" pattern="%d{hh:mm:ss} %5p [%c] %m%n"/>
</Console>
</Appenders>
<loggers>
<logger name="org.springframework" level="INFO" additivity="false">
<appender-ref ref="console" />
</logger>
<logger name="com.example.springex" level="INFO" additivity="false">
<appender-ref ref="console" />
</logger>
<!-- <logger name="org.zerock.springex.mapper" level="TRACE" additivity="false">-->
<!-- <appender-ref ref="console" />-->
<!-- </logger>-->
<root level="INFO" additivity="false">
<AppenderRef ref="console"/>
</root>
</loggers>
</configuration>
넣어서 다시 업데이트!


web-inf에 root-context.xml 만들어주기
web.inf에서 , 적어서 root-context.xml을 읽게 해준다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<context:component-scan base-package="com.example.springex"/>
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mariadb.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="bitc5600"/>
<property name="dataSourceProperties">
<props>
<prop key="cachePrepStmts">true</prop>
<prop key="prepStmtCacheSize">250</prop>
<prop key="prepStmtCacheSqlLimit">2048</prop>
</props>
</property>
</bean>
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig"/>
</bean>
</beans>


비번: bitc5600로 설정했음!
밑에 꼭 체크해주자->설치
다운되었으면 Dbeaver로 실행


테스트 누르면 다운로드가 된다.

연결!
build.gradle에
마리아db, 히카리cp 추가(메이븐 리포지토리 검색해서 추가해준다)

// DB
// https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client
implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '3.0.4'
// https://mvnrepository.com/artifact/com.zaxxer/HikariCP
implementation group: 'com.zaxxer', name: 'HikariCP', version: '5.0.1'
https://mvnrepository.com/artifact/org.mybatis/mybatis-spring/2.0.7
id 'java'
id 'war'
}
group 'com.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
ext {
junitVersion = '5.9.2'
}
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}
dependencies {
compileOnly('javax.servlet:javax.servlet-api:4.0.1')
testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
/* LOMBOK */
compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.24'
annotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.24'
testImplementation 'org.projectlombok:lombok:1.18.28'
testAnnotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.24'
/* SPRING */
implementation group: 'org.springframework', name: 'spring-core', version: '5.3.19'
implementation group: 'org.springframework', name: 'spring-context', version: '5.3.19'
implementation group: 'org.springframework', name: 'spring-test', version: '5.3.19'
implementation group: 'org.springframework', name: 'spring-webmvc', version: '5.3.19'
implementation group: 'org.springframework', name: 'spring-jdbc', version: '5.3.19'
implementation group: 'org.springframework', name: 'spring-tx', version: '5.3.19'
/* LOG4J */
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.17.2'
implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.17.2'
implementation group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.17.2'
implementation group: 'jstl', name: 'jstl', version: '1.2'
/* DB */
implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '3.0.4'
implementation group: 'com.zaxxer', name: 'HikariCP', version: '5.0.1'
/* MyBatis */
implementation group: 'org.mybatis', name: 'mybatis', version: '3.5.9'
implementation group: 'org.mybatis', name: 'mybatis-spring', version: '2.0.7'
}
test {
useJUnitPlatform()
}
root-context.xml에 추가
<context:component-scan base-package="com.example.springex"/>
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mariadb://localhost:3306/"/>
<property name="username" value="root"/>
<property name="password" value="bitc5600"/>
<property name="dataSourceProperties">
<props>
<prop key="cachePrepStmts">true</prop>
<prop key="prepStmtCacheSize">250</prop>
<prop key="prepStmtCacheSqlLimit">2048</prop>
</props>
</property>
</bean>
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<mybatis:scan base-package="com.example.springex.mapper"></mybatis:scan>

TimeMapper에 대고 알트 엔터 누르면 test도 만들 수 있다.
TimeMapperTest.java
package com.example.springex.mapper;
import lombok.extern.log4j.Log4j2;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import static org.junit.jupiter.api.Assertions.*;
@Log4j2
@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations = "file:src/main/webapp/WEB-INF/root-context.xml")
class TimeMapperTest {
@Autowired (required = false)
private TimeMapper timeMapper;
@Test
public void testGetTime(){
log.info(timeMapper.getTime());
}
}
테스트를 돌리면 시간이 나온다.


https://cofs.tistory.com/354
https://myblog.opendocs.co.kr/archives/950
Log4j 2 제대로 사용하기 - 개념
https://velog.io/@bread_dd/Log4j-2-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-%EA%B0%9C%EB%85%90
TRACE > DEBUG > INFO > WARN > ERROR > FATAL
TRACE
DEBUG보다 더 세분화 된 정보를 지정
DEBUG
프로그램 디버깅하기 위한 정보를 지정
INFO
상태변경과 같은 정보성 메세지 지정
WARN
처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메세지 지정
ERROR
요청을 처리 도중 문제가 발생한 경우
FATAL
프로그램을 중단 할 수 있는 심각한 오류, 작동이 불가능할 경우
프로젝트 진행 시 대체로 개발가이드에는 DEBUG, INFO, WARN, ERROR 4가지를 구분하여 출력하도록 되어 있다.