Subversion Repositories SmartDukaan

Rev

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