Skip to content

Instantly share code, notes, and snippets.

View dsyer's full-sized avatar

Dave Syer dsyer

View GitHub Profile
@dsyer
dsyer / git-workflow.md
Last active June 29, 2026 15:59
Git Workflow for Private Repo

Git Workflow for Private Repo

The release process, including last minute changes to fix bugs and CVEs, happens in a private repo "commercial". The normal OSS repository is "origin". The "commercial/main-internal" branch has the same source code as "origin/main", but different CI set up. Therefore github actions, in the .github directory, are definitely different, and more than likely there are additional Maven settings in .mvn. There might be differences between the pom.xml contents in "main-internal" vs "main", but ideally we want those to go away to

@dsyer
dsyer / logs.txt
Last active June 22, 2026 14:10
Here's the extra logs with -X on the command line:
[INFO] --- native:1.1.1:build (default-cli) @ spring-petclinic ---
[DEBUG] Dependency collection stats {ConflictMarker.analyzeTime=26126, ConflictMarker.markTime=26484, ConflictMarker.nodeCount=43, ConflictIdSorter.graphTime=14127, ConflictIdSorter.topsortTime=18185, ConflictIdSorter.conflictIdCount=29, ConflictIdSorter.conflictIdCycleCount=0, ConflictResolver.totalTime=188465, ConflictResolver.conflictItemCount=41, DfDependencyCollector.collectTime=1630963, DfDependencyCollector.transformTime=288736}
[DEBUG] org.graalvm.buildtools:native-maven-plugin:jar:1.1.1
[DEBUG] org.graalvm.buildtools:utils:jar:1.1.1:runtime
[DEBUG] com.github.openjson:openjson:jar:1.0.13:runtime
[DEBUG] org.graalvm.buildtools:graalvm-reachability-metadata:jar:1.1.1:runtime
[DEBUG] org.cyclonedx:cyclonedx-maven-plugin:jar:2.9.1:runtime
[DEBUG] org.cyclonedx:cyclonedx-core-java:jar:9.0.5:runtime
[DEBUG] commons-io:commons-io:jar:2.16.1:runtime
[DEBUG] org.apache.commons:commons-collections4:jar:4.4:ru
@dsyer
dsyer / table.md
Last active April 25, 2020 15:57
class method sample beans classes heap memory median mean range
com.example.bench.MicroBenchmark main demo 100.000 4671.000 7.401 47.829 0.747 0.758 0.011
@dsyer
dsyer / azure-functions.adoc
Last active September 21, 2018 08:19
Azure Functions Blog Draft

Spring Cloud Function and Azure Functions

Spring Cloud Function has had support for Microsoft Azure Functions since version 1.0, but in the latest 2.0 releases (still in milestone phase) we decided to change the programming model a bit. This article describes what the changes mean for users, and provides a bit of background behind the shift. We in the Spring team had a lot of fun working on this and collaborating with the folks at Microsoft to get

@dsyer
dsyer / config-props.md
Created November 2, 2017 10:25
Notes on Dynamic Configuration Properties

Dynamic Configuration Properties in Spring Boot and Spring Cloud

TL;DR

  • Use @ConfigurationProperties and always get state from the bean.
  • The Environment can change at runtime and Spring Cloud does this for you using RefreshEvent.
  • Changes are propagated to beans in Spring Cloud in 2 ways (@ConfigurationProperties and @RefreshScope).
  • If you care about the state of @ConfigurationProperties being consistent on concurrent access, put it or the consumer @Bean in @RefreshScope.

Typical Scenarios

@dsyer
dsyer / settings.xml
Created May 30, 2017 17:31
Settings for concourse build
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<servers>
<server>
<id>gpg.passphrase</id>
<passphrase>{{passphrase}}</passphrase>
</server>
</servers>
</settings>
@dsyer
dsyer / startup.md
Last active October 30, 2023 07:41
Notes on Spring Boot startup performance

Anatomy of Spring Boot Start Up Timing

When a Spring Boot app starts up with default (INFO) logging, there are some noticeable gaps (pauses). It's worth focusing on the gaps when looking for efficiency savings because of the amount of time they take, and because no-one bothered to log anything, so the chances are the app is doing something repetitive. We can tweak the logging levels to try and fill in the gaps and find out what is going on in there.

Basic empty web app with actuators has three such gaps:

0                                                                        1410ms
|------|---------------------------|-----|------|---------|--------|--------|
       |           578             |     |144(5)|         | 133(6) |

Modern Spring

Basic Spring Boot Features

Goal: show how it is easy to create web UI and modify its behaviour according to the environment.

  • Use start.spring.io to create an application with a simple @RestController

  • Use STS to do the same thing (and mention the other IDEs)

@dsyer
dsyer / migrating-oauth2.md
Last active May 3, 2018 14:50
Guide to migrating OAuth2 apps from Spring Boot 1.2 to 1.3

Migrating OAuth2 Apps from Spring Boot 1.2 to 1.3

There are some new features in Spring Boot 1.3 to do with OAuth2 clients and servers and Spring Security OAuth2. Some of those features were ported from Spring Cloud Security and hence were in the Angel release train of Spring Cloud, but are not in the Brixton release train. This article helps you navigate the changes and update any existing apps to use the new features confidently.

Dependency Management

If you are not using Spring Cloud you should be able to just change the version number of your Spring Boot dependency. Since some of the OAuth2 features migrated from Spring Cloud Security to Spring Boot in 1.3, it is likely that things are slightly more complicated than that. A [separate article](https://spring.io/blog/2015/11/25

java.lang.IllegalArgumentException: null
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
at org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:76)
at org.springframework.data.convert.ClassGeneratingEntityInstantiator.createInstance(ClassGeneratingEntityInstantiator.java:83)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:251)
at org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:231)