Subversion Repositories SmartDukaan

Rev

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