시스템

스프링 개발 Maven 및 rootContext 세팅 (xml, java configuration)

190730 2023. 3. 2. 01:50

 

INFO : org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started
INFO : org.springframework.web.context.support.XmlWebApplicationContext - Refreshing Root WebApplicationContext: startup date [Fri Mar 03 00:48:06 KST 2023]; root of context hierarchy
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/spring/root-context.xml]
INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
INFO : org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 1856 ms

pom.xml (xml)

<!-- 3.1.1 -> 5.0.7 변경, 자바 버전 변경 -->

<properties>
<java-version>11</java-version>
<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>

 

<!-- maven 컴파일 버전 변경 -->

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>11</source>
<target>11</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>

 

 

<!-- spring-test -->

<!-- 테스트시 필요함 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
</dependency>

 

<!-- lombok -->

<!-- 어노테이션을 활용하여 코드를 간결하게 할 수 있음 -->

<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>


<!-- log4j -->

<!-- logger 객체 생성을 위해 필요함 -->
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

 


<!-- OJDBC -->

<!-- DB 연결시 필요함 -->
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>

 

MyBatis시 필요함

<!-- 1. MyBatis -->
<!-- MyBatis와 스프링 연동용 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>

<!-- 2. MyBatis Spring -->
<!-- MyBatis와 스프링 연동용 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>

<!-- 3. Spring TX -->
<!-- 트랜잭션 처리시 필요 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>

<!-- 4. Spring JDBC -->
<!-- 스프링에서 데이터베이스 처리에 필요 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>

 

MyBatis PreparedStatement에 치환되는 ? 값 조회시 필요한 태그

<!-- log4jdbc-log4j2, MyBatis에 치환되는 ? 값을 확인할 수 있게 해주는 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>

 

JSON 데이터를 파싱시 필요함

<!-- <jackson-databind -->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.1</version>
</dependency>
</dependencies>

pom.xml (java)

xml의 maven은 동일하게 추가한다.

 

<!-- web.xml이 없다는 설정 -->

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>

 

<!-- 버전 변경 --> 

<!-- Servlet -->

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>

 

<!-- 버전 변경 1.6 -> 1.8 --> 

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>

root-context.xml

// 커넥션 풀 설정 시 위해 필요함

<!-- Root Context: defines shared resources visible to all other web components -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">

 

<!-- 1. log4jdbc-log4j2 사용 안할 시 (둘 중 하나 사용해야함) -->

<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="jdbcUrl" value="jdbc:oracle:thin:@아이피 주소:포트:XE"></property>

 

<!-- 2. log4jdbc-log4j2 사용할때 아래 태그 사용 (둘 중 하나 사용해야함) -->

<!-- 사용 시 src/main/resources/log4jdbc.log4j2.properties 생성 후 아래 태그 넣고 저장 

      log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator -->

<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>

<property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:XE"></property>

 

<property name="username" value="아이디></property>
<property name="password" value="비밀번호"></property>
</bean>

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

<!-- MyBatis에서 SQLSession을 통해 Connection 생성 및 SQL 전달,

      결과를 리턴받는데 SQLSession을 생성하기 위해 필요하다. -->
<!-- mybatis-spring mapper 설정, MyBatis가 동작할 때 Mapper를 인식할 수 있도록 설정함 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>

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

RootConfig.java (root-context.xml 대용)

@Configuration
@ComponentScan(basePackages= {"org.zerock.sample"})

@MapperScan(basePackages= {"org.zerock.mapper"})
public class RootConfig {

    @Bean
    public DataSource dataSource() {
        HikariConfig hikariConfig = new HikariConfig();
    /* log4jdbc-log4j2 x

        hikariConfig.setDriverClassName("oracle.jdbc.driver.OracleDriver");
        hikariConfig.setJdbcUrl("jdbc:oracle:thin:@아이피 주소:포트:XE");

       

        log4jdbc-log4j2 o

        hikariConfig.setDriverClassName("net.sf.log4jdbc.sql.jdbcapi.DriverSpy");
        hikariConfig.setJdbcUrl("jdbc:log4jdbc:oracle:thin:@아이피 주소:포트:XE");

     */
        hikariConfig.setUsername("아이디");
        hikariConfig.setPassword("비밀번호");
        HikariDataSource dataSource = new HikariDataSource(hikariConfig);
        return dataSource;
    }

 

    @Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSource());
        return (SqlSessionFactory) sqlSessionFactory.getObject();
    }
}

 

WebConfig.java (root-context.xml 대용)

public class WebConfig extends
     AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    // 'root-context.xml'을 대신하는 클래스를 지정
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] {RootConfig.class};
    }

@Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] {ServletConfig.class};
    }

 

    // 기본경로 "/" 기준
    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }
}

 

ServletConfig.java (servlet-context.xml 대용)

@EnableWebMvc
public class ServletConfig implements WebMvcConfigurer {

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        InternalResourceViewResolver bean = new InternalResourceViewResolver();
        bean.setViewClass(JstlView.class);
        bean.setPrefix("/WEB-INF/views/");
        bean.setSuffix(".jsp");
        registry.viewResolver(bean);
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }
}

 

TIP

log4jdbc-log4j2 사용 시 테스트 로그가 많이나와 불편할 경우 src/test/resources/log4.xml 파일 수정

해당 파일 하단 </log4j:configuration> 태그 위 아래의 태그들을 추가해주자.

(자세한 설명은 https://logging.apache.org/log4j/2.x/manual/customloglevels.html 참고)

 

</logger name="jdbc.audit">
</level value="warn" >

</logger name="jdbc.resultset">
</level value="warn" >

</logger name="jdbc.connection">
</level value="warn" >