Skip to content

Instantly share code, notes, and snippets.

@revseev
revseev / logback-spring.xml
Created February 14, 2023 06:55
Logback logger settings for GELF (Graylog) support
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%green(%date) %highlight(%-5level) %magenta([%thread]) %cyan(%logger{10}) %blue(: %msg%n)
</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
The issue is within exchanged formats between HAL browser and (SpringBoot) app.
To fix it, use `accept application/hal+json` in HAL.
@revseev
revseev / Props.Kt
Created December 9, 2021 12:25
Externalized properties with Kotlin
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.PropertySource
import kotlin.properties.Delegates
@Configuration
@PropertySource(
value = ["\${app.processing.configuration}"], // file:/folder/processing-config.yml
factory = YamlPropertySourceFactory::class,
encoding = "UTF-8"
@revseev
revseev / Main.java
Created August 14, 2020 15:28 — forked from lachlan/Main.java
Split a large XML file into smaller XML files by a given element name
package com.github.lachlan.xml.splitter;
public class Main {
public static final int BUFFER_SIZE = 8192;
public static void main(String[] args) {
Main main = new Main();
if (args.length < 2) {
System.out.println("Usage: ");
/** Выясняем номер последней страницы (макс кол-во страниц) */
public int getLastApprovedPageNumber(int pageSize) {
String genericClassName = persistentClass.toGenericString();
genericClassName = genericClassName.substring(genericClassName.lastIndexOf('.') + 1);
String jql = "Select count(*) from " + genericClassName + " WHERE isApproved = true";
Query query = entityManager.createQuery(jql);
long count = (long) query.getSingleResult();
int lastPageNumber = (int) ((count / pageSize) + 1);
return lastPageNumber;
}
@revseev
revseev / DB timestamp query
Created April 5, 2020 16:41
JPQL Timestamp query
@Override
public List<Song> getByCreatedDateRange(Timestamp dateFrom, Timestamp dateTo) {
return entityManager
.createQuery("FROM Song s WHERE s.createdAt >= :dateFrom AND s.createdAt <= :dateTo ORDER BY s.createdAt", Song.class)
.setParameter("dateFrom", dateFrom)
.setParameter("dateTo", dateTo).getResultList();
}
@revseev
revseev / JPQL delete with JOIN query
Last active April 5, 2020 16:41
JPQL delete with JOIN query
@Override
@Transactional(propagation= Propagation.MANDATORY)
public void bulkDeleteByUserId(Long id) {
// Write all pending changes to the DB
entityManager.flush();
// Remove all entities from the persistence context
entityManager.clear();
entityManager.createQuery("DELETE FROM StudentReviewAnswer x " +
"WHERE x IN (SELECT sra FROM StudentReviewAnswer sra " +
"JOIN StudentReview sr ON sra.studentReview.id = sr.id " +
@revseev
revseev / Logger.txt
Last active February 11, 2020 15:37
Logger getLogger
private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
// можно использовать и копировать между классами. Но тогда источник будет иметь полный путь класса, а это не всегда удобно
// http://slf4j.org/faq.html#declared_static