Spring을 위한 이클립스 설정2

이동언·2024년 8월 29일

new world

목록 보기
35/62
post-thumbnail

8.29(목)

1. log4j2

1-1. resources 폴더 내부에 log4j2.xml 파일을 드래그 앤 드롭

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>

    <!-- Appender, Layout 설정 -->
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout/>
        </Console>
    </Appenders>

    <!-- Logger 설정 -->
    <Loggers>
        <Logger name="com.zaxxer" level="DEBUG" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.zerock" level="TRACE" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Root level="INFO">
            <AppenderRef ref="console"/>
        </Root>
    </Loggers>

</Configuration>

1-2. pom.xml 에 추가하기

  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.23.1</version>
  </dependency>
  
    <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.23.1</version>
  </dependency>

  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.23.1</version>
  </dependency>

1-3. LOG4J2 내용 수정 및 추가

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>

    <!-- Appender, Layout 설정 -->
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
	<PatternLayout
		 pattern="%d{MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />

		</Console>
    </Appenders>

    <!-- Logger 설정 -->
    <Loggers>
        <Logger name="com.zaxxer" level="DEBUG" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.springframework" level="DEBUG" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Logger name="org.zerock" level="INFO" additivity="false">
            <AppenderRef ref="console"/>
        </Logger>
        <Root level="INFO">
            <AppenderRef ref="console"/>
        </Root>
    </Loggers>

</Configuration>




2. test

2-1. pom.xml 추가

   <dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-test</artifactId>
	    <version>6.1.11</version>
	</dependency>

2-2. test폴더 확인 및 log4j2 복사
test파일이 해당경로에 있는지 확인하고, 없으면 생성해준다. java 및 resources 폴더도 생성이 필요하다.
src/test/resources 아래에 log4j2.xml파일을 생성해두면 테스트할때는 info level로 하는것처럼 따로 설정할수있다.

2-3. test 패키지 생성하고 패키지 잘 돌아가는지 확인하기위해 LoadTests 파일 생성하여 코드 붙혀넣기, pom.xml 추가
📌 테스트를 실행하기 위해서는 public void test1() 의 test1을 더블클릭후에 오른쪽클릭해서
run -> j.unit test

package org.zerock.w1;

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 org.zerock.w1.service.HelloService;

import lombok.extern.log4j.Log4j2;

@ExtendWith(SpringExtension.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j2
public class LoadTests {


@Autowired // helloService를 주입시키는 역할
private HelloService helloService;

@Test
public void test1() {
	log.info("-----------------");
	log.info(helloService);
}

}

  <dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-api</artifactId>
    <version>5.10.3</version>
    <scope>test</scope>
  </dependency>





3. hicari CP JDBC 연결

3-1. maven 추가

<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb-java-client</artifactId>
    <version>3.4.1</version>
</dependency>

<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
    <version>5.1.0</version>
</dependency>

3-2. root-context 추가

<?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/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!-- bean definitions here -->
    
    <bean name="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
        <property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mariadb://localhost:3306/bootdb2"/>
        <property name="username" value="bootdb2user"/>
        <property name="password" value="bootdb2user"/>
        <property name="connectionTimeout" value="30000"/>
        <property name="minimumIdle" value="2"/>
    </bean>

    <bean name="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
        <constructor-arg ref="hikariConfig"/>
    </bean>

	<context:component-scan base-package="org.zerock.w1.service;"></context:component-scan>

</beans>

3-3. db연결확인위해 connetTests 클래스 생성 / contextconfiguration 내용은 loadtest의 내용을 복붙

package org.zerock.w1;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

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 lombok.Cleanup;
import lombok.extern.log4j.Log4j2;

@ExtendWith(SpringExtension.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j2
public class ConnectTests {
	
	@Autowired
	private DataSource ds;
	
	@Test
	public void testConnect() throws SQLException {
		
		@Cleanup Connection con = ds.getConnection();
		log.info(con);
	}
	
	

}




4. my batis

4-1. pom.xml

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.11</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>3.0.4</version>
</dependency>

   <dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-jdbc</artifactId>
	    <version>6.1.11</version>
	</dependency>
	
	   <dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-tx</artifactId>
	    <version>6.1.11</version>
	</dependency>

4-2. mappers 패키지 생성 , TImeMapper 인터페이스 생성

4-3. root-context 전체내용수정

<?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/context"
       xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
    <!-- bean definitions here -->
    
    <bean name="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
        <property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mariadb://localhost:3306/bootdb2"/>
        <property name="username" value="bootdb2user"/>
        <property name="password" value="bootdb2user"/>
        <property name="connectionTimeout" value="30000"/>
        <property name="minimumIdle" value="2"/>
    </bean>

    <bean name="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
        <constructor-arg ref="hikariConfig"/>
    </bean>
    
        <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <mybatis-spring:scan base-package="org.zerock.ex00.mappers"/>
    

	<context:component-scan base-package=" org.zerock.w1.mappers;"></context:component-scan>

</beans>

4-4. TimeTests class 생성




5. 시간 출력

5-1. Hello controller 내용 수정

package org.zerock.w1.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.zerock.w1.service.HelloService;

import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;

@Controller
@RequiredArgsConstructor
@Log4j2
public class HelloController {
	

	private final HelloService helloService;
	
	
	
	@GetMapping("/hello")
	public void hello(Model model) {
		log.info("hello............zz" + helloService);
		
		String timeStr = helloService.getTime();
		
		model.addAttribute("timeStr", timeStr);
	}

}

5-2. hello service 내용 수정

package org.zerock.w1.service;

import org.springframework.stereotype.Service;
import org.zerock.w1.mappers.TimeMapper;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class HelloService {
	
	private final TimeMapper timeMapper;
	
	public String getTime() {
		return timeMapper.getTime();
	}

}

5-3. hello.jsp 내용 수정

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>Hello JSP FILE${timeStr}</h1>
</body>
</html>

5-4. mappers 폴더생성, mapper.xml생성 및 mapper.xml 코드작성

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--dtd의 역할은 자동완성-->

<mapper namespace="org.zerock.w1.mappers.TimeMapper"> <!-- 인터페이스의 경로를 똑같이하고 메소드이름 똑같이 -->

<select id="getTime2" resultType="string"> <!-- 인터페이스 메소드이름 적고, 해당 메소드의 타입을 적되, 소문자로 -->

select now()

</select>

</mapper>

5-5. 인터페이스 메소드 생성

5-6. root-context 내부 정보 추가 / 이폴더안에는 mybatis mappers.xml이 들어있다라는의미

5-7. timeTests.java 에 내용 추가

5-8. test2 의 test시에 잘 되는지 확인




6. todo

6-1. vo 패키지생성, todo 클래스 생성

6-2. 클래스 내부에 vo처럼 변수생성

6-3. TodoMapper 인터페이스 생성

6-4. test코드 생성

6-5. 하지만, sql문을 java와 섞이는 인터페이스에 생성하지 않고 주로 xml에 sql문을 작성한다. todoMapper 인터페이스 수정, todo.xml생성 및 작성

6-6. 기존의 테스트 코드 작성해도 되지만 forEach이용해도 됨

0개의 댓글