Subversion Repositories SmartDukaan

Rev

Rev 29838 | Rev 30307 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
23723 amit.gupta 1
package com.smartdukaan.cron.config;
2
 
29838 tejbeer 3
import java.time.LocalDate;
24433 amit.gupta 4
import java.time.LocalDateTime;
5
import java.time.format.DateTimeFormatter;
6
import java.time.format.DateTimeFormatterBuilder;
23723 amit.gupta 7
import java.util.Properties;
8
 
9
import javax.sql.DataSource;
10
 
23755 amit.gupta 11
import org.apache.logging.log4j.LogManager;
12
import org.apache.logging.log4j.Logger;
23723 amit.gupta 13
import org.hibernate.SessionFactory;
14
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.beans.factory.annotation.Value;
16
import org.springframework.context.annotation.Bean;
23755 amit.gupta 17
import org.springframework.context.annotation.ComponentScan;
23723 amit.gupta 18
import org.springframework.context.annotation.Configuration;
23898 amit.gupta 19
import org.springframework.context.annotation.Primary;
23723 amit.gupta 20
import org.springframework.context.annotation.PropertySource;
21
import org.springframework.jdbc.datasource.DriverManagerDataSource;
22
import org.springframework.orm.hibernate5.HibernateTransactionManager;
23
import org.springframework.orm.hibernate5.LocalSessionFactoryBuilder;
24
import org.springframework.transaction.annotation.EnableTransactionManagement;
25
 
24433 amit.gupta 26
import com.fasterxml.jackson.databind.ObjectMapper;
27
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
28
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
29859 amit.gupta 29
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
24433 amit.gupta 30
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
29859 amit.gupta 31
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
24433 amit.gupta 32
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
33
import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
25721 tejbeer 34
import com.google.gson.Gson;
35
import com.google.gson.GsonBuilder;
29838 tejbeer 36
import com.spice.profitmandi.dao.convertor.LocalDateJsonConverter;
25721 tejbeer 37
import com.spice.profitmandi.dao.convertor.LocalDateTimeJsonConverter;
23738 amit.gupta 38
import com.spice.profitmandi.dao.repository.dtr.Mongo;
39
 
23723 amit.gupta 40
@Configuration
41
@EnableTransactionManagement
23755 amit.gupta 42
@ComponentScan("com.spice.profitmandi.*")
23723 amit.gupta 43
@PropertySource("classpath:META-INF/env.properties")
44
public class DBConfig {
45
 
25721 tejbeer 46
	private static final Logger LOGGER = LogManager.getLogger(DBConfig.class);
23723 amit.gupta 47
 
23755 amit.gupta 48
	private static final String HIBERNATE_DIALECT = "hibernate.dialect";
23723 amit.gupta 49
 
23755 amit.gupta 50
	private static final String HIBERNATE_SHOW_SQL = "hibernate.show_sql";
23723 amit.gupta 51
 
23755 amit.gupta 52
	private static final String HIBERNATE_FORMAT_SQL = "hibernate.format_sql";
23723 amit.gupta 53
 
23755 amit.gupta 54
	private static final String HIBERNATE_JDBC_BATCH_SIZE = "hibernate.jdbc.batch_size";
23723 amit.gupta 55
 
23755 amit.gupta 56
	private static final String HIBERNATE_C3P0_MIN_SIZE = "hibernate.c3p0.min_size";
23723 amit.gupta 57
 
23755 amit.gupta 58
	private static final String HIBERNATE_C3P0_MAX_SIZE = "hibernate.c3p0.max_size";
23723 amit.gupta 59
 
23755 amit.gupta 60
	private static final String HIBERNATE_C3P0_TIMEOUT = "hibernate.c3p0.timeout";
23723 amit.gupta 61
 
23755 amit.gupta 62
	private static final String HIBERNATE_C3P0_MAX_STATEMENTS = "hibernate.c3p0.max_statements";
23723 amit.gupta 63
 
23755 amit.gupta 64
	private static final String HIBERNATE_C3P0_IDLE_TEST_PERIOD = "hibernate.c3p0.idle_test_period";
65
 
23723 amit.gupta 66
	@Value("${hibernate.driver.class}")
67
	private String hibernateDriverClass;
68
 
69
	@Value("${hibernate.url}")
70
	private String hibernateUrl;
71
 
72
	@Value("${hibernate.user.name}")
73
	private String hibernateUserName;
74
 
75
	@Value("${hibernate.password}")
76
	private String hibernatePassword;
77
 
78
	@Value("${hibernate.dialect}")
79
	private String hibernateDialect;
80
 
81
	@Value("${hibernate.show_sql}")
82
	private String hibernateShowSql;
83
 
84
	@Value("${hibernate.format_sql}")
85
	private String hibernateFormatSql;
86
 
87
	@Value("${hibernate.jdbc.batch_size}")
88
	private String hibernateBatchSize;
89
 
90
	@Value("${hibernate.c3p0.min_size}")
91
	private String hibernateMinSize;
92
 
93
	@Value("${hibernate.c3p0.max_size}")
94
	private String hibernateMaxSize;
95
 
96
	@Value("${hibernate.c3p0.timeout}")
97
	private String hibernateTimeout;
98
 
99
	@Value("${hibernate.c3p0.max_statements}")
100
	private String hibernateMaxStatements;
101
 
102
	@Value("${hibernate.c3p0.idle_test_period}")
103
	private String hibernateIdleTestPeriod;
25721 tejbeer 104
 
23738 amit.gupta 105
	@Value("${mongo.host}")
106
	private String mongoHost;
23723 amit.gupta 107
 
23738 amit.gupta 108
	@Value("${content.mongo.host}")
109
	private String contentMongoHost;
25721 tejbeer 110
 
23898 amit.gupta 111
	@Primary
23723 amit.gupta 112
	@Bean(name = "dataSource")
113
	public DataSource dataSource() {
114
		DriverManagerDataSource dataSource = new DriverManagerDataSource();
115
		dataSource.setDriverClassName(hibernateDriverClass);
116
		dataSource.setUrl(hibernateUrl);
117
		dataSource.setUsername(hibernateUserName);
118
		dataSource.setPassword(hibernatePassword);
23755 amit.gupta 119
		LOGGER.info("DataSource returned {}", dataSource);
23723 amit.gupta 120
		return dataSource;
121
	}
25721 tejbeer 122
 
24433 amit.gupta 123
	@Bean
124
	public ObjectMapper objectMapper() {
25721 tejbeer 125
		DateTimeFormatter df = new DateTimeFormatterBuilder().parseCaseInsensitive()
126
				.append(DateTimeFormatter.ISO_LOCAL_DATE).optionalStart().appendLiteral('T').optionalEnd()
127
				.appendLiteral(' ').append(DateTimeFormatter.ISO_LOCAL_TIME).toFormatter();
128
		DateTimeFormatter sf = new DateTimeFormatterBuilder().parseCaseInsensitive()
129
				.append(DateTimeFormatter.ISO_LOCAL_DATE).appendLiteral('T').append(DateTimeFormatter.ISO_LOCAL_TIME)
24433 amit.gupta 130
				.toFormatter();
131
		LocalDateTimeSerializer serializer = new LocalDateTimeSerializer(sf);
132
		LocalDateTimeDeserializer deserializer = new LocalDateTimeDeserializer(df);
29859 amit.gupta 133
		LocalDateSerializer serializer1 = new LocalDateSerializer(DateTimeFormatter.ISO_LOCAL_DATE);
134
		LocalDateDeserializer deserializer1 = new LocalDateDeserializer(DateTimeFormatter.ISO_LOCAL_DATE);
24433 amit.gupta 135
		JavaTimeModule jtm = new JavaTimeModule();
136
		jtm.addSerializer(LocalDateTime.class, serializer);
29859 amit.gupta 137
		jtm.addSerializer(LocalDate.class, serializer1);
24433 amit.gupta 138
		jtm.addDeserializer(LocalDateTime.class, deserializer);
29859 amit.gupta 139
		jtm.addDeserializer(LocalDate.class, deserializer1);
25721 tejbeer 140
		ObjectMapper mapper = new ObjectMapper().registerModule(new ParameterNamesModule())
141
				.registerModule(new Jdk8Module()).registerModule(jtm); // new module, NOT JSR310Module
24433 amit.gupta 142
		return mapper;
143
	}
23723 amit.gupta 144
 
145
	@Bean
146
	public Properties getHibernateProperties() {
147
		Properties dbProperties = new Properties();
148
		dbProperties.put(HIBERNATE_DIALECT, hibernateDialect);
149
		dbProperties.put(HIBERNATE_SHOW_SQL, hibernateShowSql);
150
		dbProperties.put(HIBERNATE_FORMAT_SQL, hibernateFormatSql);
151
		dbProperties.put(HIBERNATE_JDBC_BATCH_SIZE, hibernateBatchSize);
152
		dbProperties.put(HIBERNATE_C3P0_MIN_SIZE, hibernateMinSize);
153
		dbProperties.put(HIBERNATE_C3P0_MAX_SIZE, hibernateMaxSize);
154
		dbProperties.put(HIBERNATE_C3P0_TIMEOUT, hibernateTimeout);
155
		dbProperties.put(HIBERNATE_C3P0_MAX_STATEMENTS, hibernateMaxStatements);
156
		dbProperties.put(HIBERNATE_C3P0_IDLE_TEST_PERIOD, hibernateIdleTestPeriod);
157
		return dbProperties;
158
	}
25721 tejbeer 159
 
23898 amit.gupta 160
	@Primary
23723 amit.gupta 161
	@Autowired
162
	@Bean(name = "sessionFactory")
163
	public SessionFactory getSessionFactory(DataSource dataSource) {
164
		LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);
165
		sessionBuilder.addProperties(getHibernateProperties());
166
		sessionBuilder.scanPackages("com.spice.profitmandi.dao.*");
167
		return sessionBuilder.buildSessionFactory();
168
	}
25721 tejbeer 169
 
23898 amit.gupta 170
	@Primary
23723 amit.gupta 171
	@Autowired
172
	@Bean(name = "transactionManager")
173
	public HibernateTransactionManager getTransactionManager(SessionFactory sessionFactory) {
174
		HibernateTransactionManager transactionManager = new HibernateTransactionManager(sessionFactory);
175
		return transactionManager;
176
	}
25721 tejbeer 177
 
23738 amit.gupta 178
	@Bean
179
	public Mongo mongoClient(SessionFactory sessionFactory) {
180
		return new Mongo(mongoHost, contentMongoHost);
181
	}
25721 tejbeer 182
 
183
	@Bean(name = "gson")
184
	public Gson gson() {
185
 
27999 amit.gupta 186
		Gson gson = new GsonBuilder().serializeNulls()
29838 tejbeer 187
				.registerTypeAdapter(LocalDate.class, new LocalDateJsonConverter())
25721 tejbeer 188
				.registerTypeAdapter(LocalDateTime.class, new LocalDateTimeJsonConverter()).create();
189
		return gson;
190
 
191
	}
23723 amit.gupta 192
}