-
Notifications
You must be signed in to change notification settings - Fork 0
krishnabab/MySpringBootTests
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
* Liquibase maven plugin to generate SQL <plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <configuration> <changeLogFile> src/main/resources/db/changelog/db.changelog-master.yaml </changeLogFile> <driver>org.h2.Driver</driver> <url>jdbc:h2:mem:profile;DB_CLOSE_DELAY=-1</url> <username>TM_PROFILE</username> <password></password> </configuration> <version>3.6.2</version> </plugin> * mvn org.liquibase:liquibase-maven-plugin:updateSQL * mvn org.liquibase:liquibase-maven-plugin:status * Rabbit mq Commands to add admin user C:\Users\P2949259>cd C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.7\sbin C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.7\sbin>rabbitmqctl.bat add_user krishna krishna Adding user "krishna" ... C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.7\sbin>rabbitmqctl.bat set_user_tags krishna administrator Setting tags for user "krishna" to [administrator] ... C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.7\sbin>rabbitmqctl.bat set_permissions -p / krishna ".*" ".*" ".*" Setting permissions for user "krishna" in vhost "/" ... C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.7\sbin>curl -i -u krishna:krishna http://localhost:15672/api/whoami HTTP/1.1 200 OK cache-control: no-cache content-length: 41 content-security-policy: script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self' content-type: application/json date: Tue, 15 Sep 2020 21:26:11 GMT server: Cowboy vary: accept, accept-encoding, origin {"name":"krishna","tags":"administrator"} * Spring JPA Keywords for mongoDB https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#repository-query-keywords * Spring Data JPA DELETE with Query @Modifying @Query("delete from TableB o where o.state in :status and o.createdDate < :date") void deleteByStateAndCreatedDateLessThan(@Param("status") List<String> status, @Param("date") Date date); * spring data jpa - repository can have custom query like below to handle ignore null values from params @Query(" SELECT p FROM Photo p WHERE (:addressId is null or p.addressId = :addressId) and " + "(:jobNumber is null or p.jobNumber = :jobNumber) and (:workOrder is null or p.workOrder = :workOrder) and " + "(:accountNumber is null or p.accountNumber = :accountNumber)") List<Photo> findAllByAnyField(String addressId, String jobNumber, String workOrder, String accountNumber); * Hibernate loglevel and l2 cache diable logging.level.org.hibernate.internal.util.EntityPrinter: info hibernate.cache.use_second_level_cache: false * To externalize the logback xml through config property in yml or properties file logging.config: file:C:/Users/ffff/Desktop/logback-spring.xml * To get dispatcher servlet request data with in other places of springboot code ResettableStreamHttpServletRequest servletReq = (ResettableStreamHttpServletRequest)(((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest()); * Spring boot property to allow Bean overriding spring.main.allow-bean-definition-overriding: true * Config loading based on property @Configuration @ConditionalOnProperty( value="quantum.metrics.externalcall.monitoring.enabled", havingValue = "true", matchIfMissing = false ) @ComponentScan("com.xyz.acc.common.abc.*") * After spring appln started to do for example enrich after RestTemplate bean created @PostConstruct public void enrichRestCleint() { restTemplate.getInterceptors().add(restTemplateQuantumInterceptor); } * When override a bean but want to load only if no bean was found with that name @ConditionalOnMissingBean(RestTemplate.class) * Get the working restendpoint method name from httpservlet request HttpServletRequest * Use properties from POM.xml @Autowired BuildProperties buildProperties; buildProperties.getName() buildProperties.getVersion() * Springboot debugging Pass these vmargument -Dlogging.level.org.springframework=debug Program arguments --debug * Junit 4 mockito example package com.charter.techmobile.common.quantum.service; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; import java.io.IOException; import java.nio.charset.Charset; import java.util.Collections; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.IOUtils; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.boot.configurationprocessor.json.JSONException; import org.springframework.boot.info.BuildProperties; import org.springframework.mock.web.DelegatingServletInputStream; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import com.charter.techmobile.common.quantum.httpwrapper.ResettableStreamHttpServletRequest; import com.charter.techmobile.common.quantum.httpwrapper.ResettableStreamHttpServletResponse; import com.charter.techmobile.common.quantum.model.Message; import com.charter.techmobile.common.quantum.model.QuantumData; import com.charter.techmobile.common.util.Constants; @RunWith(MockitoJUnitRunner.class) public class QuantumDataBuilderTest { @Mock BuildProperties buildProperties; @Mock Authentication auth; @InjectMocks QuantumDataBuilder quantumDataBuilder = new QuantumDataBuilder(); ResettableStreamHttpServletRequest request; ResettableStreamHttpServletResponse response; Message msg; @Before public void intializer() throws IOException { HttpServletRequest httpRequest = Mockito.mock(HttpServletRequest.class); request = new ResettableStreamHttpServletRequest(httpRequest); HttpServletResponse httpResponse = Mockito.mock(HttpServletResponse.class); response = new ResettableStreamHttpServletResponse(httpResponse); msg = Mockito.mock(Message.class); when(msg.getName()).thenReturn(Constants.MSG_IN_RES); request.requestId = "12345678ABCD"; when(httpRequest.getHeaderNames()).thenReturn(Collections.enumeration(Collections.singleton("one"))); when(httpRequest.getInputStream()).thenReturn(new DelegatingServletInputStream(IOUtils.toInputStream("Testinput", Charset.defaultCharset()))); when(auth.getName()).thenReturn("TEST USER"); SecurityContextHolder.getContext().setAuthentication(auth); } @Test public void testBuildQuantumDataResettableStreamHttpServletRequest() throws IOException, JSONException { QuantumData quantumData = quantumDataBuilder.buildQuantumData(request, response, msg); assertEquals("12345678ABCD"+Constants.MSG_IN_RES, quantumData.getTraceId()+quantumData.getMessage().getName()); } } * junit 5 mockito example package com.charter.techmobile.common.quantum.service; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.platform.runner.JUnitPlatform; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.boot.configurationprocessor.json.JSONException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import com.charter.techmobile.common.quantum.httpwrapper.ResettableStreamHttpServletRequest; import com.charter.techmobile.common.quantum.httpwrapper.ResettableStreamHttpServletResponse; import com.charter.techmobile.common.quantum.model.Message; import com.charter.techmobile.common.quantum.model.QuantumData; @RunWith(JUnitPlatform.class) @ExtendWith(MockitoExtension.class) class QuantumServiceImplTest { @Mock QuantumDataBuilder quantumDataBuilder; @Mock QuantumRestClient quantumClient; @InjectMocks QuantumServiceImpl quantumService = new QuantumServiceImpl(); ResettableStreamHttpServletRequest request; ResettableStreamHttpServletResponse response; Message msg; QuantumData quantumData; @BeforeEach public void intializer() throws IOException, JSONException { HttpServletRequest httpRequest = Mockito.mock(HttpServletRequest.class); request = new ResettableStreamHttpServletRequest(httpRequest); HttpServletResponse httpResponse = Mockito.mock(HttpServletResponse.class); response = new ResettableStreamHttpServletResponse(httpResponse); msg = Mockito.mock(Message.class); //when(msg.getName()).thenReturn(Constants.MSG_IN_RES); request.requestId = "12345678ABCD"; quantumData = Mockito.mock(QuantumData.class); quantumData.setMessage(msg); when(quantumDataBuilder.buildQuantumData(request, response, msg)).thenReturn(quantumData); ResponseEntity res = Mockito.mock(ResponseEntity.class); when(res.getStatusCode()).thenReturn(HttpStatus.OK); when(quantumClient.publishToQuantum(quantumData)).thenReturn(res); } @Test void testPublishToQuantumResettableStreamHttpServletRequest() { quantumService.publishToQuantum(request, response, msg); verify(quantumClient).publishToQuantum(quantumData); } } ##### CRONS #### https://reflectoring.io/spring-scheduler/ https://www.freeformatter.com/cron-expression-generator-quartz.html ┌───────────── second (0-59) │ ┌───────────── minute (0 - 59) │ │ ┌───────────── hour (0 - 23) │ │ │ ┌───────────── day of the month (1 - 31) │ │ │ │ ┌───────────── month (1 - 12) (or JAN-DEC) │ │ │ │ │ ┌───────────── day of the week (0 - 7) │ │ │ │ │ │ (or MON-SUN -- 0 or 7 is Sunday) │ │ │ │ │ │ * * * * * * differences between * and ? To explain difference between ? and * in the expressions, first of all take a look at this table: Field Name Mandatory Allowed Values Allowed Special Characters Seconds YES 0-59 , - * / Minutes YES 0-59 , - * / Hours YES 0-23 , - * / Day of month YES 1-31 , - * ? / L W //allowed '?' Month YES 1-12 or JAN-DEC , - * / Day of week YES 1-7 or SUN-SAT , - * ? / L # //allowed '?' Year NO empty, 1970-2099 , - * / As you can see ? is only allowed in Day of month and Day of week is mandatory in one of both fields and will tell Quartz this value has not been defined, thus, use the other field (if you put ? into Day of month, the value used will be Day of week). some of the example expressions to understand this Expression Meaning second, minute, hour, day, month, weekday 0 0 12 * * ? Fire at 12pm (noon) every day 0 15 10 ? * * Fire at 10:15am every day 0 15 10 * * ? Fire at 10:15am every day 0 15 10 * * ? * Fire at 10:15am every day 0 15 10 * * ? 2005 Fire at 10:15am every day during the year 2005 0 * 14 * * ? Fire every minute starting at 2pm and ending at 2:59pm, every day 0 0/5 14 * * ? Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day 0 0/5 14,18 * * ? Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day 0 0 0 ? * * * At 00:00:00am every day 0 0/01 13-16 * * * this runs between 1 pm to 4 pm ..every one min... 0 0 * * * * the top of every hour of every day. */10 * * * * * every ten seconds 0 0 8-10 * * * 8, 9 and 10 o'clock of every day 0 0 6,19 * * * 6:00 AM and 7:00 PM every day 0 0/30 8-10 * * * 8:00, 8:30, 9:00, 9:30, 10:00 and 10:30 every day 0 0 9-17 * * MON-FRI on the hour nine-to-five weekdays 0 0 0 25 12 ? every Christmas Day at midnight 0 0/10 * * * * Run every 10 mins 0 0 0/3 * * * Run every 3 hours
About
My Spring boot tests is a maven based plain simple Spring boot project to try out quick spring boot things
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published