Jack Chu
Jack Chu

Reputation: 6821

Can I configure Grails with no datasource?

I have a Grails app that loads its data from xml files and delivers rss feeds via rome. I don't have any domain classes and my app has no datasource. I don't want Grails to load an in memory hsql db when the application has no need for it. Deleting the DataSource.groovy file prevents me from launching the web app, it seems as though the datasource is required, but is there anything I can do if my application doesn't need a datasource?

Upvotes: 25

Views: 8719

Answers (4)

Pablo Pazos
Pablo Pazos

Reputation: 3226

This is a good guide: http://digitalbreed.com/2011/using-grails-without-a-database

Remove Grails’ Hibernate plugin.

  1. grails uninstall-plugin hibernate
  2. Delete the datasource configuration file conf/DataSource.groovy
  3. Explicitly declare services as non-transactional. The default is true and your class methods would be proxied, but without the Hibernate plugin there is no transaction manager and the deployment will fail.

    class SomeService { static transactional = false // ... }

  4. Use command objects instead of domain objects, particularly if you need validation.

Upvotes: 2

John Wagenleitner
John Wagenleitner

Reputation: 11035

The following steps work for a new app (Grails 1.1.1) to run without using a datasource:

grails create-app nodb
cd nodb
grails uninstall-plugin hibernate
rm grails-app/conf/DataSource.groovy
grails create-controller Foo
<add "render "hi bar" to the index closure of ./grails-app/controllers/FooController.groovy>
grails run-app
http://localhost:8080/nodb/foo - prints hi bar

For an existing app on at least version 1.1 (think that's when hibernate was made a plugin) you should be able to just uninstall-plugin and delete the DataSource.groovy file.

Upvotes: 21

Jared
Jared

Reputation: 39913

I was able to comment out the data source and get a default grails app to run. Comment out your production section in the same way I commented out the following code in datasource.groovy


/*  development {
        dataSource {
            dbCreate = "create-drop" // one of 'create', 'create-drop','update'
            url = "jdbc:hsqldb:mem:devDB"
        }
    }*/

I was also able to remove the hibernate plugin using "grails uninstall-plugin hibernate" and still have the default app run. I haven't done extensive testing with this but hopefully this works for you.

Upvotes: 6

Burt Beckwith
Burt Beckwith

Reputation: 75681

The in-memory database is very lightweight so you should stick with that if you don't need a real database.

Upvotes: 4

Related Questions