spring3.2 java config Servler3
-
Upload
yonghyuk-lee -
Category
Technology
-
view
1.024 -
download
4
description
Transcript of spring3.2 java config Servler3
Servlet3-javaConfig 한방 스팀팩
JBOSS USER GROUP 이용혁
13년 9월 8일 일요일
Agenda✓ servlet3
✓ javaConfig
✓ Spring3.2
✓ properties
✓ datasource
✓ mybatis3
✓ mongoDB
✓ cache - infinispan
✓ sitemesh
✓ DEMO
✓ Q & A
✓ Thanks
13년 9월 8일 일요일
Servlet3✓ @WebServlet
✓ @WebFilter
✓ @WebInitParam
✓ @WebListener
✓ @MultipartConfig
http://download.oracle.com/otn-pub/jcp/servlet-3.0-fr-eval-oth-JSpec/servlet-3_0-final-spec.pdf?AuthParam=1378521700_c856fbccc3460a9c9e8be159abb92ee9
13년 9월 8일 일요일
javaConfig<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <servlet> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/classes/app-config.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
web.xml
13년 9월 8일 일요일
javaConfig with Springpublic class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return null; }
@Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[] { WebConfig.class }; }
@Override protected String[] getServletMappings() { return new String[] { "/" }; } @Override protected Filter[] getServletFilters() { CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); characterEncodingFilter.setEncoding("UTF-8"); characterEncodingFilter.setForceEncoding(true); return new Filter[] { characterEncodingFilter, new SiteMeshFilter()}; }}
WebInitializer.java
13년 9월 8일 일요일
Spring 3.2.?
http://static.springsource.org/spring-framework/docs/3.2.0.RELEASE/spring-framework-reference/html/
mvc.html#mvc-container-config
13년 9월 8일 일요일
Spring 3.2.? with javaConfig@EnableWebMvc@ComponentScan(basePackages = "com.playfam.web")public class WebConfig extends WebMvcConfigurerAdapter {
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); }
@Override public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); localeChangeInterceptor.setParamName("lang"); registry.addInterceptor(localeChangeInterceptor); } @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { Charset s = Charset.forName("UTF-8"); converters.add(new StringHttpMessageConverter(s)); }
@Bean public ViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/views/"); viewResolver.setSuffix(".jsp"); return viewResolver; } @Bean public MultipartResolver multipartResolver() { CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); multipartResolver.setMaxUploadSize(5*1024*1024); return multipartResolver; } }
13년 9월 8일 일요일
properties@Configuration@PropertySource({ "classpath:db.${spring.profiles.active:local}.properties", "classpath:conf.${spring.profiles.active:local}.properties" })public class PropertiesConfig {
@Bean public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer(){ return new PropertySourcesPlaceholderConfigurer(); }}
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:db.${spring.profiles.active}.properties</value> <value>classpath:conf.${spring.profiles.active}.properties</value> </list> </property> </bean>
13년 9월 8일 일요일
datasource<tx:annotation-driven/> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${db.mssql.driverClassName}"/> <property name="url" value="${db.mssql.url}"/> <property name="username" value="${db.mssql.username}"/> <property name="password" value="${db.mssql.password}"/> <property name="maxActive" value="${db.mssql.maxActive}" /> <property name="maxIdle" value="${db.mssql.maxIdle}" /> <property name="maxWait" value="${db.mssql.maxWait}" /> <property name="defaultAutoCommit" value="${db.mssql.defaultAutoCommit}" /> </bean> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean>
13년 9월 8일 일요일
datasource@Configuration@EnableTransactionManagementpublic class DatabaseConfig { @Profile({ "local", "dev", "stg" }) static class Local {
@Autowired Environment env; @Bean public DataSource dataSource() { BasicDataSource ds = new BasicDataSource(); try{ ds.setDriverClassName(env.getProperty("db.mysql.driverClassName")); ds.setUrl(env.getProperty("db.mysql.url")); ds.setUsername(env.getProperty("db.mysql.username")); ds.setPassword(env.getProperty("db.mysql.password")); }catch(Exception e){ e.printStackTrace(); } return ds; } }
@Bean @Autowired public DataSourceTransactionManager txManager(DataSource dataSource){ DataSourceTransactionManager txManager = new DataSourceTransactionManager(); txManager.setDataSource(dataSource); return txManager; }}
@Profile({ "real" }) @Resource(name="jdbc/MyDB") static class Prod { @Bean public DataSource dataSource() { final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup(); dsLookup.setResourceRef(true); DataSource dataSource = dsLookup.getDataSource("java:comp/dnv/jdbc/MyDB"); return dataSource; } }
13년 9월 8일 일요일
mybaties3.?@Configuration//@MapperScan("classpath:com/playfam/web/model/mapper/**/*.xml")public class MybatisConfig { @Bean @Autowired public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{ SqlSessionFactoryBean sb = new SqlSessionFactoryBean(); sb.setDataSource(dataSource); sb.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:com/playfam/web/model/mapper/*.xml"));
sb.setConfigLocation(new DefaultResourceLoader().getResource("classpath:config_mybatis.xml")); return sb.getObject(); }
@Bean @Autowired public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory){ SqlSessionTemplate s = new SqlSessionTemplate(sqlSessionFactory); return s; }}
기존설정 유지
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath:com/playfam/model/mapper/**/*.xml" /> <property name="configLocation" value="classpath:config_mybatis.xml" /> </bean> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg ref="sqlSessionFactory" /> </bean>
13년 9월 8일 일요일
mongoDB
@Configurationpublic class MongoConfig { @Autowired Environment env; @Bean public MongoTemplate mongoTemplate() { return new MongoTemplate( env.getProperty("db.mongo.dbName"), env.getProperty("db.mongo.user"), env.getProperty("db.mongo.pass"), env.getProperty("db.mongo.host"), Integer.parseInt(env.getProperty("db.mongo.port")), Boolean.parseBoolean(env.getProperty("db.mongo.autoConnectRetry")), Integer.parseInt(env.getProperty("db.mongo.connectionsPerHost")), Integer.parseInt(env.getProperty("db.mongo.connectTimeout")), Integer.parseInt(env.getProperty("db.mongo.maxWaitTime")), Integer.parseInt(env.getProperty("db.mongo.threadsAllowedToBlockForConnectionMultiplier")), Integer.parseInt(env.getProperty("db.mongo.socketTimeout")) ); }}
<bean id="mongoTemplate" class="com.itembay.common.mongo.MongoTemplate"> <constructor-arg name="dbName" value="${db.mongo.name}"/> <constructor-arg name="username" value="${db.mongo.user}"/> <constructor-arg name="password" value="${db.mongo.pass}"/> <constructor-arg name="host" value="${db.mongo.host}"/> <constructor-arg name="port" value="${db.mongo.port}"/> <constructor-arg name="autoConnectRetry" value="${db.mongo.autoConnectRetry}"/> <constructor-arg name="connectionsPerHost" value="${db.mongo.connectionsPerHost}"/> <constructor-arg name="connectTimeout" value="${db.mongo.connectTimeout}"/> <constructor-arg name="maxWaitTime" value="${db.mongo.maxWaitTime}"/> <constructor-arg name="threadsAllowedToBlockForConnectionMultiplier" value="${db.mongo.threadsAllowedToBlockForConnectionMultiplier}"/> <constructor-arg name="socketTimeout" value="${db.mongo.socketTimeout}"/> <constructor-arg name="cacheConfigPath" value="${cache.prop.path}"/> </bean>
13년 9월 8일 일요일
mongoDBpublic class MongoTemplate { private static DB db; private static MongoClient mongoClient; public MongoTemplate(String dbName, String username, String password, String host, int port, boolean autoConnectRetry, int connectionsPerHost, int connectTimeout, int maxWaitTime, int threadsAllowedToBlockForConnectionMultiplier, int socketTimeout) { if(mongoClient == null){ Builder b = MongoClientOptions.builder(); b.autoConnectRetry(autoConnectRetry); b.connectionsPerHost(connectionsPerHost); b.connectTimeout(connectTimeout); b.maxWaitTime(maxWaitTime); b.threadsAllowedToBlockForConnectionMultiplier(threadsAllowedToBlockForConnectionMultiplier); b.socketTimeout(socketTimeout); MongoClientOptions options = b.build(); try { List<ServerAddress> list = new ArrayList<ServerAddress>(); for(String h : host.split(";")){ list.add(new ServerAddress(h.split(":")[0], Integer.parseInt(h.split(":")[1]))); } mongoClient = new MongoClient(list,options); mongoClient.setWriteConcern(WriteConcern.SAFE); db = mongoClient.getDB(dbName); db.authenticate(username, password.toCharArray()); } catch (Exception e) { e.printStackTrace(); } } } public static DBCollection getDBCollection(String collectionName){ return db.getCollection(collectionName); }}
13년 9월 8일 일요일
cache - infinispan@Configuration@EnableCachingpublic class InfinispanConfig { @Bean public SpringRemoteCacheManagerFactoryBean cacheManager() throws Exception{ SpringRemoteCacheManagerFactoryBean cacheManager = new SpringRemoteCacheManagerFactoryBean(); String active = System.getProperty("spring.profiles.active", "local"); cacheManager.setConfigurationPropertiesFileLocation(
new DefaultResourceLoader().getResource("classpath:hotrod-client-"+active+".properties"));
return cacheManager; }} @Autowired CacheManager cacheManager;
@Test public void test() throws Exception { //obtain a handle to the remote default cache Cache cache = cacheManager.getCache("default"); //now add something to the cache and make sure it is there cache.put("car", "ferrari"); assert cache.get("car").get().equals("ferrari"); cache.evict("car"); assert cache.get("car").equals(null); }
https://docs.jboss.org/author/display/ISPN/Using+Infinispan+as+a+Spring+Cache+provider
13년 9월 8일 일요일
cache - infinispan✓ @Cacheable
✓ @CachePut
✓ @CacheEvict
@Cacheable(value = "authCache", key = "#key")public DBObject getAuthInfo(String key) throws Exception
@CachePut(value = "authCache", key = "#key")public DBObject generateAuthInfo(String key) throws Exception
@CacheEvict(value = "authCache", key = "#key")public void removeAuthInfo(String key) throws Exception
13년 9월 8일 일요일
sitemesh@Override
protected Filter[] getServletFilters() { CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); characterEncodingFilter.setEncoding("UTF-8"); characterEncodingFilter.setForceEncoding(true); return new Filter[] { characterEncodingFilter, new SiteMeshFilter()}; }
<?xml version="1.0" encoding="UTF-8"?><decorators defaultdir="/WEB-INF/decorators/">
<excludes> <pattern>/rss/*</pattern> <pattern>/test/*</pattern> <pattern>*.json</pattern> </excludes>
<decorator name="default" page="mobileLayout.jsp"> <pattern>/</pattern> </decorator> <decorator name="mobile" page="webLayout.jsp"> <pattern>*.m</pattern> </decorator> <decorator name="app" page="appLayout.jsp"> <pattern>*.app</pattern> </decorator>
</decorators>
13년 9월 8일 일요일
Thank You !
Q & Awww.playfam.com
[email protected]://github.com/unlogicaldev/springServlet3JavaConfig
13년 9월 8일 일요일