Spring forward: an introduction to Spring
boot and Thymeleaf for (XPages)
developers
Frank van der Linden
Full stack Developer
elstar IT
About me
• Freelance Full stack developer
• Owner of elstar IT
• Curious of new technology
• IBM Champion 2013, 2014, 2017, 2018 and 2019
Disclaimer
Session is NOT about #dominoforever
How to proceed
• What is Spring boot and Thymeleaf
• Similarities and differences
• Runs everywhere
• How to start
• Syntax
• Security
• New possibilities
What is Spring boot and
Thymeleaf
Spring Ecosystem
Spring boot
• Open source, Pivotal is coordinating.
• Spring boot creates Spring (Java) based applications
• Embedded Tomcat makes it ‘just’ run everywhere
• Auto configure as much as possible
• Built in metrics and health checks
• Easy to configure with YAML or property file
• Very good documentation and code examples
• Fast creation of REST api’s
Thymeleaf
• Is a template engine
• Based on Java and HTML5
• Very strict, or template will break
• Full Spring framework support
• Extensible with dialects
• Full (and extensible) internationalisation support.
• Reusable fragments, like Custom Controls
• Extensive documentation
Similarities and differences
XPages Spring Boot/Thymeleaf
Configure Faces-config @Autowired
Endpoints Need work or SmartNSF very strong support
Security Built-in Need Spring Security
Add-ons
Lots of 3rd party add-on
Thanks to OpenNTF
Lots of 3rd party add-on
Deployment Runs on Domino Runs everwhere
Build Pain of the Domino Designer Maven/Gradle build out-of-the box
IDE
DDE (Windows)
for OSGi plugins almost every IDE
Almost every IDE, like Netbeans, Eclipse, IntelliJ and more
(Windows, Linux, MacOS)
Runs everywhere
Runs everywhere
• With Embedded Tomcat as default the jar ‘just run’
• More choices of embedded web server, in the future also OpenLiberty
• Will run on Docker
• Will run on Cloud Foundry, like IBM Cloud or Pivotal on Azure
• Tomcat can by excluding to run it on Websphere Application Server, Tomcat
or WildFly (a.k.a JBoss)
• Even on Domino as OSGi plugin, http://hasselba.ch/blog/?p=2589
How to start
How to start
• Install Gradle or Maven
• Move over to start.spring.io
• Or use the Starter in IntelliJ
• Fill all the fields and select the required projects (full version)
• Generate project
• Download zip, unzip and add to Git repository.
• Open project in favourite IDE, run ‘mvn clean install’
• Start coding
Wizard in IntelliJ
Spring boot setup
minimal YAML file
Thymeleaf setup
add to pom.xml
How it works together
Syntax
Spring boot syntax
endpoint to return an object as JSON
endpoint to return a thymeleaf template
Component scan
• Component scan will scan all the packages for @Service, @Controller,
@Repository and more @Component(s)
• @Autowired will glue everything together
Thymeleaf syntax
• Include the th namespace to the page
• Every html element attribute has a th:…. Equivalent.
• Variable Expressions: ${...}
• Selection Variable Expressions: *{...}
• Message Expressions: #{...}
• Link URL Expressions: @{...}
Namespace
<html lang="en" xmlns:th="http://www.thymeleaf.org">
Thymeleaf attributes
Variable Expressions
Selection Variable Expressions
Message Expressions
Link URL Expressions
resource links
links in on a page
Global objects
Fragments (1)
Fragments (2)fragment code
use it multiple times
Attachments
• Forget the UploadedFile provided by IBM, learn MultipartFile
• MultipartFile has lots of similarities with UploadedFile, but easier to use.
Less code to achieve the same
Security
Spring Security
• Framework for Authentication and Authorisation
• Prevention of clickjacking, CORS, cross site request forgery
• Integrates with Spring Boot and Thymeleaf
• Customisable to the bone
• Support for Basic Authentication, SAML2, oAuth and more.
Configuration
CORS prevention
add to pom.xml
Spring security in Thymeleaf
add to pom.xml
add namespace
New possibilities
Lombok
• Forget Getters and Setters
• Forget toString, hashCode and equals
• One @Annotations rules the all (@Data or @Getter and @Setter)
• Add logging by @annotations (@Log4j2 or @Slf4j)
Lombok
add to pom.xml
add @Data
using the build in logging
Swagger
• Part of Open API Specification, since v3
• Documentation of API’s
• Playground for testing
• Add annotation to generate the documentation dynamically
Swagger
add to pom.xml
add a configuration
add annotation to endpoint
Jenkins
• With Jenkins you can build automatically the application
• …But also do quality control, do load tests and even deploy.
• JenkinsFile should be in the root of the GIT Repository
• Groovy is the language for JenkinsFile
Jenkins file
Questions
Spring Forward Starter
https://bitbucket.org/flinden68/spring-forward-starter
Reach out to me
@flinden68
https://www.elstarit.nl
flinden68@elstarit.nl
https://nl.linkedin.com/in/flinden68
https://github.com/flinden68
Resources
• Spring Initializr
• http://start.spring.io/
• Thymeleaf documentation
• http://www.thymeleaf.org/
• Spring Boot
• https://projects.spring.io/spring-boot/
• Lombok
• https://projectlombok.org/
• Jenkins
• https://jenkins.io/
Resources
• Swagger
• http://swagger.io
• Thymeleaf documentation
• http://www.thymeleaf.org/
• Maven
• https://maven.apache.org/
• Gradle
• https://gradle.org/
• Spring Forward Starter
• https://bitbucket.org/flinden68/spring-forward-starter

NCUG 2019: Spring forward: an introduction to Spring boot and Thymeleaf for (XPages) developers