Spring tips

From DarkWiki
Revision as of 09:33, 16 April 2020 by Apowney (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Configuration

@Value

Simple setting of values.

    @Value("${prop.strName:default value}}")
    private String localDir;

    @Value("${prop.intName:14}}")
    private int localDir;

Apply a setting, defaulting to a subdirectory of the temporary folder.

    @Value("${prop.name:#{systemProperties['java.io.tmpdir']+'/subdir'}}")
    private String localDir;

When a value is not present in the application.properties file, assume null.

    @Value("${prop.name:#{null}}")
    private String remoteUrl;

Noteworthy classes

Class Notes
ClassPathScanningCandidateComponentProvider Used for scanning for annotated classes etc. See: https://gist.github.com/skempken/dbb2ad55d213cd6a1f50
SpringDataWebProperties A good example of how Spring configuration properties are bound from YML (etc.)

Further reading

A list of configuration properties can be found here: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

Data

Pageable

Given an endpoint:

    @GetMapping("/api/test/pager")
    public Page<String> pager(@PageableDefault(sort = "name",direction = Sort.Direction.ASC) Pageable pageable) {
        return new PageImpl<>(List.of("My string"),pageable,1);
    }

It can be called using:

http://localhost:8080/api/test/pager?sort=andy,desc&sort=age,asc

It will output something like:

{
  "content": [
    "My string"
  ],
  "pageable": {
    "sort": {
      "sorted": true,
      "unsorted": false,
      "empty": false
    },
    "offset": 0,
    "pageNumber": 0,
    "pageSize": 10,
    "paged": true,
    "unpaged": false
  },
  "last": true,
  "totalPages": 1,
  "totalElements": 1,
  "number": 0,
  "sort": {
    "sorted": true,
    "unsorted": false,
    "empty": false
  },
  "size": 10,
  "first": true,
  "numberOfElements": 1,
  "empty": false
}

Useful classes

ApplicationListener

You can execute code once the application becomes ready (e.g. as part of start-up):

...
@Component
class MyClass implements ApplicationListener<ApplicationReadyEvent> {
...
    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        // Do something
    }
...
}