Skip to content

Instantly share code, notes, and snippets.

@disc99
disc99 / Config.java
Created August 26, 2023 00:05
Manual property configuration with Spring Boot
@Configuration
class Config {
@Bean(name = "myDataSource")
DataSource myDataSource(DataSourceProperties dataSourceProperties, ConfigurableEnvironment environment) {
MutablePropertySources propertySources = environment.getPropertySources();
Binder binder = new Binder(ConfigurationPropertySources.from(propertySources));
HikariDataSource dataSource = dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
BindResult<HikariDataSource> result = binder.bind("my.spring.datasource.hikari", Bindable.ofInstance(dataSource));
return result.get();
@disc99
disc99 / CacheKey.java
Last active March 9, 2021 12:02
Doma one-to-many mapping
package com.example.demo;
import lombok.EqualsAndHashCode;
import java.util.List;
import java.util.function.Function;
import static java.util.stream.Collectors.toList;
@EqualsAndHashCode

capture shell

asciinema rec -c bash mycli.cast

cast to gif

public interface MySqlDao {
    default int findRows() {
        return SelectBuilder.newInstance(Config.get(this))
                .sql("SELECT FOUND_ROWS()")
                .getScalarSingleResult(int.class);
    }

    default int lastInsertId() {
        return SelectBuilder.newInstance(Config.get(this))

Examples

Java

protoc -I=$SRC_DIR \
  --java_out=$DST_DIR \
  $SRC_DIR/HelloService.proto

gRPC-Web (Using protoc-gen-grpc-web plugin)

@disc99
disc99 / ApplicationAdvice.java
Created November 3, 2018 09:36
よく使うAOP
import io.grpc.Status;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
import javax.validation.ConstraintViolationException;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.stream.Collector;
import static java.util.stream.Collectors.*;
#Japanese messages
javax.validation.constraints.AssertFalse.message=Falseでなければなりません。
javax.validation.constraints.AssertTrue.message=Trueでなければなりません。
javax.validation.constraints.DecimalMax.message={value}以下でなければなりません。
javax.validation.constraints.DecimalMin.message={value}以上でなければなりません。
javax.validation.constraints.Digits.message=境界以外の数値(予測:<{integer} digits>.<{fraction} digits>)
javax.validation.constraints.Future.message=未来日付でなければなりません。
javax.validation.constraints.Max.message={value}以下でなければなりません。
javax.validation.constraints.Min.message={value}以上でなければなりません。
javax.validation.constraints.NotNull.message=Nullは許可されていません。

IntelliJ + gradle + annotation processor の設定方法

  • build.gradeに生成されたクラスをIntelliJで読み込む為の設定
apply plugin: 'java'
apply plugin: 'idea'

repositories {
	maven {
 url "http://dl.bintray.com/disc99/maven"