How Spring Boot Simplifies the Configuration Process
Here are a few examples demonstrating how Spring Boot simplifies the configuration process automatically, along with how we would configure these manually without using Spring Boot:
Example 1: Data Source Configuration
With Spring Boot:
Spring Boot automatically configures the data source based on properties defined in application.properties
or application.yml
.
# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=pass
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
Without Spring Boot:
We need to manually define the data source bean in our Spring configuration file.
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("pass");
return dataSource;
}
}
Example 2: JPA Configuration
With Spring Boot:
Spring Boot auto-configures JPA settings using properties defined in application.properties
.
# application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=pass
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
Without Spring Boot:
We need to manually configure the JPA entity manager factory and transaction manager.
@Configuration
@EnableTransactionManagement
public class JpaConfig {
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
em.setPackagesToScan("com.example.model");
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
return em;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", "update");
properties.setProperty("hibernate.show_sql", "true");
return properties;
}
}
Example 3: Thymeleaf Configuration
With Spring Boot:
Spring Boot automatically configures Thymeleaf as the view resolver based on the dependency in pom.xml
.
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Without Spring Boot:
We need to manually configure the Thymeleaf view resolver in our Spring configuration file.
@Configuration
public class ThymeleafConfig {
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
return templateEngine;
}
@Bean
public ITemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setCacheable(true);
return templateResolver;
}
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
return viewResolver;
}
}
Example 4: Security Configuration
With Spring Boot:
Spring Boot provides default security configuration and can be customized using properties.
# application.properties
spring.security.user.name=user
spring.security.user.password=pass
Without Spring Boot:
We need to manually configure the security settings.
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user")
.password("{noop}pass")
.roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
Conclusion
Spring Boot simplifies configuration through auto-configuration and sensible defaults, reducing the need for boilerplate code. It allows developers to focus more on writing business logic rather than configuration setup. These examples highlight how Spring Boot’s auto-configuration can save time and effort compared to manual configuration in traditional Spring applications.