Commit Graph

278 Commits

Author SHA1 Message Date
Dave Syer
0def7644c2 Check for existence of ResourceBundle before creating MessageSource
Irritatingly a ResourceBundleMessageSource never gives up trying to
create a resource bundle for every message resolution, so to stop
it logging all those warnings (and probably sucking performance-wise)
we need to disable the MessageSource if a bundle is not provided.

Fixes gh-1019
2014-06-03 15:53:46 +01:00
Dave Syer
251dbddc6e Use null instead of 'none' for ddlAuto
Fixes gh-1012
2014-06-03 10:30:36 +01:00
Dave Syer
56e70ca585 Introduce subpackages for Spring Data autoconfig
(If we ever want to modularize this will make it less painful)

Fixes gh-1015
2014-06-03 09:15:47 +01:00
Dave Syer
bc5a4bcc1e Compiler warnings 2014-06-03 08:44:30 +01:00
Dave Syer
1f82ef4deb Ensure JPA/Security are not fighting with each other on startup
This is *really* nasty (and led me to discover a related bug
https://jira.spring.io/browse/SPR-11844), but fortunately easy to
hide from users once you have a test case.

The problem is that Spring Security registers a `BeanPostProcessor`
to handle `GlobalAuthenticationConfigurerAdapters`, and Boot
registers a `BeanPostProcessor` to handle injecting the packages
to scan into an `EntityManagerFactory` from `@EntityScan`. The
clash comes because the `EntityScanBeanPostProcessor` wants to be
postprocessed by the Security postprocessor, but if the Security
configuration depends on JPA it won't be ready in time.

The fix (or workaround) depending on how you look at it is to
prevent the other bean post processors from taking an interest in
`EntityScanBeanPostProcessor` at all (mark it as synthetic).

Fixes gh-1008
2014-06-02 19:32:17 +01:00
Dave Syer
49a09c807c Defer SQL initialization to fit with JPA better
Added 2 new spring.datasource.* properties ("data" like
"schema", and "deferDdl" like the "spring.jpa.hibernate.*"
flag). The SQL scripts are then run separately and the "data"
ones are triggered by a new DataSourceInitializedEvent,
which is also published by the Hibernate DDL schema export.

Fixes gh-1006
2014-06-02 13:10:50 +01:00
Dave Syer
efcbb32788 Remove some compiler warnings 2014-06-02 10:56:12 +01:00
Phillip Webb
738d195587 Create JMS sub-packages
Reorganize the `jms` package into `hornetq` and `activemq` sub-pacakges.

Fixes gh-1005
2014-06-01 13:49:41 +01:00
Phillip Webb
e5cda040b0 Restore test classes
Restore test classes accidentally deleted and ignored in c43fd04f3e.
2014-06-01 13:11:25 +01:00
Phillip Webb
c43fd04f3e Add Elasticsearch tests
Add unit tests for elasticsearch packages. Also refactor some
of the existing tests to prevent Repository clashes.

See gh-408
2014-06-01 12:54:42 +01:00
Stephane Nicoll
5a69bb9267 Add HornetQ JMS support
Provide auto-configuration support for HornetQ JMS broker, along with
an additional starter POM.

The connection factory connects to a broker available on the local
machine by default. A configuration switch allows to enable an embedded
mode that starts HornetQ as part of the application.

In such a mode, the spring.hornetq.embedded.* properties provide
additional options to configure the embedded broker. In particular,
message persistence and data directory locations can be specified. It is
also possible to define the queue(s) and topic(s) to create on startup.

Fixes: gh-765
2014-05-30 23:26:07 +01:00
Dave Syer
29cb21c322 Be lenient with prefix and add period if missing 2014-05-30 15:11:24 +01:00
Dave Syer
b0579c1cf3 Ensure JPA vendor properties are period separated
If you bind to Map<String,Object> you get a nested Map instead
of period-separated keys. This change just makes JpaProperties
expose a Map<String,String> so the keys are sane.

Fixes gh-988
2014-05-30 10:25:01 +01:00
Phillip Webb
11a093bdc0 Polish 2014-05-30 00:31:11 +01:00
Dave Syer
5e3cc95ccf Adjust security.basic.enabled=false behaviour
Actually the web-secure sample is misusing
security.basic.enabled=false (IMO) - it should be a flag
to say that you want to temporarily disable the basic security
fallback on application endpoins, not  way to disable all
security autoconfiguration.

Added test case to web-secure sample to ensure a user
can log in.

Fixes gh-979
2014-05-29 13:25:01 +01:00
Phillip Webb
bdcb9407eb Restore commons-logging dependency for spring-boot
Restore the dependency on commons-logging (transitively via spring-core)
for spring-boot. This means that we are not tied directly to SLF4J, but
it is still an option that can be used via `jcl-over-slf4j`.

The `spring-boot-starter-parent` continues to replace `commons-logging`
with `jcl-over-slf4j`.

Fixes gh-981
2014-05-28 23:03:26 +01:00
Phillip Webb
5a5a7be477 Polish 2014-05-28 22:05:23 +01:00
Andy Wilkinson
7a8be3d600 Use Spring Framework bom and fully exclude commons-logging
Closes #955
Closes #978
2014-05-28 20:12:29 +01:00
Andy Wilkinson
47e3a72390 Source code formatting 2014-05-28 13:38:03 +01:00
Craig Walls
f006b1231c Add Spring Social autoconfiguration 2014-05-28 13:30:41 +01:00
Phillip Webb
6381fdcb49 Polish 2014-05-26 21:48:19 +01:00
Dave Syer
32295b9bdc Add options for Flyway to have its own DataSource
Either set flyway.[url,user,password] or create a DataSource
@Bean and mark it @FlywayDataSource.

Fixes gh-807
2014-05-26 08:55:28 +01:00
Roy Clarkson
9f52a0dbd7 Add Spring Mobile SitePreferenceAutoConfiguration
New feature in Spring Mobile (user preferences per site).

Fixes gh-946
2014-05-26 07:00:03 +01:00
Dave Syer
68448a8c68 Use the ServerProperties to add prefixes to paths
when server.servletPath is set we need to add prefixes to
the security filter paths.

Fixes gh-945
2014-05-24 08:33:14 +01:00
Dave Syer
4999d41145 Add test for servletMapping() 2014-05-23 11:05:29 +01:00
Dave Syer
660d9e24dc Add servlet path to /error if it is customized
In addition I added some convenience methods to ServerProperties
(servletMapping() and servletPrefix()) for manipulating the
servlet path as provided by the user (e.g. normalizing it into
a valid Servlet mapping path for the DispatcherServlet).

Fixes gh-939, see also gh-936
2014-05-23 10:48:34 +01:00
Andy Wilkinson
aaa5b9ddf1 Continue to support spring.jpa.hibernate.namingstrategy
In 1.0, the property spring.jpa.hibernate.namingstrategy could be
used to configure Hibernate's naming strategy. This was at odds with
most other configuration where binding to namingStrategy would require
a property with some indication that it was two separate words, for
example: naming-strategy, naming_strategy, or namingStrategy

This commit adds a new setter, setNamingstrategy, to JpaProperties so
that an app that was using namingstrategy in 1.0 continues to work
in 1.1.

Issue #928
2014-05-22 21:24:50 +01:00
Phillip Webb
1a475102de Polish 2014-05-22 20:33:08 +01:00
apoplexy
dfc1979ea2 Allow the tomcat maxHttpHeaderSize to be changed in external config
Prevents large SPNEGO headers from causing server errors for example.
Added the property to ServerProperties.

Fixes gh-931
2014-05-22 17:43:09 +01:00
Andy Wilkinson
e45ef06b56 Polish Spring Data Solr integration 2014-05-22 17:29:12 +01:00
Christoph Strobl
6ed69709d7 Add auto configuration support for Spring Data Solr
Registers required components in application context if not available to
set up environment for usage with Spring Data Solr. Will listen on
SolrServer and SolrRepositories for configuration.

By default an HttpSolrServer is registered unless a zkHost (zookeeper
host) is defined. In that case an instance of CloudSolrServer will be
created.

By default multicore support is enabled, creating instances of
SolrServer for each core defined via @SolrDocument.
2014-05-22 17:29:12 +01:00
Dave Syer
e9d594c693 Add conditional processing option for unhelpful FactoryBeans
OnBeanCondition has some issues with FactoryBean object types where
the FactoryBean is not generic (i.e. you have to instantiate it to
get its object type). This is a known issue (see tests in
ConditionalOnMissingBeanTests), but we can provide some help for
library authors who know the type in advance. The approach we have
taken here is to check the BeanDefinition for an attribute called
"factoryBeanObjectType" (OnBeanCondition.FACTORY_BEAN_OBJECT_TYPE)
which, if it exists, can be used as a tie-breaker. Its value should
be a Class<?> instance.

Fixes gh-921
2014-05-21 12:47:53 +01:00
Phillip Webb
8bcda1bcbe Polish 2014-05-20 18:26:56 +01:00
Dave Syer
e118515d7a Use Flyway to bind flyway.*
Since Flyway has bean properties (with getters and setters)
it can be used to bin directly to the Environment (instead of
copying all the properties into FlywayProperties).

Fixes gh-806
2014-05-20 11:28:56 +01:00
Dave Syer
93a33f0197 Fix test 2014-05-19 12:27:24 +01:00
Andy Wilkinson
2378fe0900 Add support for using Velocity templates 2014-05-19 12:01:20 +01:00
Maciej Walkowiak
b33eb95dd2 Added DriverClassNameProvider used for providing jdbc driver class based on jdbc url
Uses known databases from org.flywaydb.core.internal.util.jdbc.DriverDataSource

Fixes gh-824, fixes gh-809
2014-05-19 11:52:27 +01:00
Dave Syer
a5543f18b9 Add callback for modifying or inspecting LocalContainerEntityManagerFactoryBean
A callback is added in autoconfig, so that if users inject the EntityManagerFactoryBuilder
into their app and use it to create multiple EntityManagerFactories, they all get the
same deferred DDL behaviour. The deferred DDL can also be disabled by setting
spring.jpa.hibernate.deferDdl=true.

Fixes gh-894
2014-05-19 11:08:11 +01:00
Dave Syer
f2e3d94fa1 Use Hibernate native APIs to defer processing DDL
The EntityManagerFactory will happily process the DDL on startup, but
that happens too early (because of LoadtimeWeaverAware processing). We
can defer it to a more civilised stage, e.g. ContextRefreshedEvent by
using the Hibernate native APIs directly.

It makes the JpaProperties slightly more complex because they need
to distinguish between the early init and late processing versions
of the Hibernate properties.

Not ready for prime time yet because there is no way to deal with
multiple EntityManagers.

Fixes gh-894
2014-05-19 11:08:11 +01:00
Dave Syer
f572992c5d Relax requirement for groovy template directory to exist
Since groovy-templates is included with groovy-all it is unreasonable
to expect anyone who has it on their classpath to have resolvable templates.
We may need to revisit this decision, but since the origain feature
that drove this was thymeleaf and idaiotic users having it on their
classpath but not using it, maybe we don't need to.
2014-05-15 22:12:27 +01:00
Dave Syer
da2e25f90d Add Groovy template engine support for Spring MVC apps
Default suffix .tpl. If groovy-templates is on the classpath user
can now add templates and get them rendered and resolved in an MVC
app.

TODO: Macro helpers for message rendering etc.

See gh-878
2014-05-15 17:42:53 +01:00
Phillip Webb
0b4e2b3667 Polish revisted JMS support
- Add createConnectionFactory method on ActiveMQProperties
- Change getBrokerUrl to return the broker URL and add new deduce method
- Move static methods to end of class
- Apply source formatting
2014-05-15 16:32:30 +01:00
Stephane Nicoll
e695e5d637 Revisit JMS support
Since ActiveMQ 5.8.0, the modules structure has been revisited and
activemq-core no longer exists. The activemq-broker is required to
create an embedded broker. Since Boot creates such broker by default
if ConnectionFactory is present, a condition has been added to do so
only when the necessary classes are present in the classpath.

The default embedded broker is now configured to disable message
persistence altogether as this requires an extra jar since 5.8.0, i.e.
activemq-kahadb-store.

Split the ActiveMQ auto configuration from the JmsTemplate auto
configuration so these are totally independent.
ActiveMQAutoConfiguration has been created to detect and configure
the ActiveMQ broker if necessary.

The brokerUrl parameter was ignored as long as the inMemory parameter
was true. The actual brokerUrl to use is now determined by the user
defined values of those parameters: if the brokerUrl is set, it is always
used. If no brokerUrl is set, the value of inMemory determines if an
embedded broker should be used (true) or a tcp connection to an
existing local broker (false).

JmsTemplateAutoConfiguration now creates a JmsTemplate only if a
ConnectionFactory is available.

Fixes gh-872, gh-882, gh-883
2014-05-15 16:18:41 +02:00
Dave Syer
0a11459c3e path->templateLoaderPath 2014-05-15 15:03:51 +01:00
Phillip Webb
aaf50a768c spring.freemarker.templateLoaderPath -> path
Fixup tests and documentation following the rename of
spring.freemarker.templateLoaderPath to spring.freemarker.path
2014-05-15 14:54:14 +01:00
Dave Syer
d2112e27a3 Add FreeMarkerProperties instead of raw Environment access
It's better for readability and tooling. Changed
templateLoaderPath -> path (simpler and unlikely to clash)
2014-05-15 13:10:53 +01:00
Phillip Webb
01fcf61140 Polish 2014-05-15 09:51:16 +01:00
Dave Syer
7454c4866b Support for @ConfigurationProperties in JPA
Adds JpaProperties to bind to spring.jpa.* (making those
properties easier to reason about and visible in the
/configprops endpoint).

Also allows easy configuration of multiple EntityManagerFactories via new
EntityManagerFactoryBuilder. JpaBaseConfiguration has a @Bean of that type
so users can inject it to create new or additional EntityManagerFactories.
This also simplifies the Hibernate autoconfiguration.

Also renames the DataSourceFactory to DataSourceBuilder (since that's what it
is).
2014-05-15 09:18:38 +01:00
Dave Syer
5249f54c5a Integrate @ConfigurationProperties @Beans with DataSource configuration
We now have a much simpler DataSourceAutoConfiguration that binds to whatever
DataSource concrete type it finds at runtime. To be able to quickly switch between
Hikari and the other types of DataSource there's a minute shim for translating
the common properties (username, password, url, driverClassName), but actually
only url is different. The shim and also DataSource initialization is supported
through DataSourceProperties, but the other native properties get bound directly
through the concrete runtime type of the DataSource.

The /configprops endpoint works (and is exposed in the actuator sample).

Fixes gh-840, fixes gh-477, see also gh-808.
2014-05-13 16:46:04 +01:00
Dave Syer
1b284a0619 Add RelaxedDataSourceFactory 2014-05-13 16:45:48 +01:00