Subversion Repositories SmartDukaan

Rev

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