Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 8b817e46

Přidáno uživatelem Patrik Harag před asi 6 roky(ů)

Improve db configuration

Zobrazit rozdíly:

sources/imiger-core/create_table.sql
1

  
2

  
3
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
4
SET time_zone = "+00:00";
5

  
6
--
7
-- Databáze: `visualization_tool`
8
--
9

  
10
-- --------------------------------------------------------
11

  
12
--
13
-- Struktura tabulky `user`
14
--
15

  
16
CREATE TABLE IF NOT EXISTS `user` (
17
  `id` int(11) NOT NULL AUTO_INCREMENT,
18
  `nick` varchar(50) COLLATE utf8_czech_ci NOT NULL,
19
  `name` varchar(255) COLLATE utf8_czech_ci NOT NULL DEFAULT '',
20
  `psw` varchar(60) COLLATE utf8_czech_ci NOT NULL,
21
  `session` varchar(50) COLLATE utf8_czech_ci NOT NULL,
22
  `active` tinyint(1) NOT NULL,
23
  `created` datetime NOT NULL,
24
  `email` varchar(50) COLLATE utf8_czech_ci NOT NULL,
25
   CONSTRAINT PK_user PRIMARY KEY (`id`)
26
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
27

  
28
--
29
-- Struktura tabulky `diagram`
30
--
31

  
32
CREATE TABLE IF NOT EXISTS `diagram` (
33
  `id` int(11) NOT NULL AUTO_INCREMENT,
34
  `name` varchar(255) COLLATE utf8_czech_ci NOT NULL,
35
  `created` datetime NOT NULL,
36
  `last_update` datetime NOT NULL,
37
  `user_id` int(11) NOT NULL,
38
  `public` tinyint(1) NOT NULL DEFAULT '0',
39
  `graph_json` longtext COLLATE utf8_czech_ci NOT NULL DEFAULT '',
40
  CONSTRAINT PK_diagram PRIMARY KEY (`id`),
41
  CONSTRAINT  FK_user_diagram FOREIGN KEY (`user_id`) REFERENCES user(`id`)
42
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
43

  
sources/imiger-core/src/main/java/cz/zcu/kiv/offscreen/user/MyBatisUtil.java
1 1
package cz.zcu.kiv.offscreen.user;
2 2

  
3
import java.io.*;
4
import java.nio.charset.StandardCharsets;
5
import java.util.Properties;
3 6
import org.apache.ibatis.io.Resources;
7
import org.apache.ibatis.jdbc.ScriptRunner;
8
import org.apache.ibatis.session.SqlSession;
4 9
import org.apache.ibatis.session.SqlSessionFactory;
5 10
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
6 11

  
7
import java.io.InputStream;
8

  
9 12
public class MyBatisUtil {
10 13
    private static final String CONFIGURATION = "mybatis-config.xml";
14
    private static final String DB_INIT_SCRIPT = "create_table.sql";
15

  
16
    private static final String PROPERTY_INIT_DB = "INIT_DB";
17
    private static final String PROPERTY_JDBC_DATABASE_URL = "JDBC_DATABASE_URL";
18
    private static final String PROPERTY_JDBC_DATABASE_USERNAME = "JDBC_DATABASE_USERNAME";
19
    private static final String PROPERTY_JDBC_DATABASE_PASSWORD = "JDBC_DATABASE_PASSWORD";
20

  
11 21
    private static SqlSessionFactory sqlSessionFactory;
12 22

  
13 23
    public static SqlSessionFactory getSqlSessionFactory() {
14

  
15 24
        if (sqlSessionFactory == null) {
16 25
            try {
17
                InputStream inputStream = Resources.getResourceAsStream(CONFIGURATION);
18
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
26
                sqlSessionFactory = createFactory();
27
                if (Boolean.parseBoolean(System.getenv(PROPERTY_INIT_DB))) {
28
                    initDatabase(sqlSessionFactory);
29
                }
19 30
            } catch (Exception e) {
20 31
                throw new DataAccessException(e);
21 32
            }
22 33
        }
23 34
        return sqlSessionFactory;
24 35
    }
36

  
37
    private static SqlSessionFactory createFactory() throws IOException {
38
        Properties properties = new Properties();
39
        properties.setProperty(PROPERTY_JDBC_DATABASE_URL, System.getenv(PROPERTY_JDBC_DATABASE_URL));
40
        properties.setProperty(PROPERTY_JDBC_DATABASE_USERNAME, System.getenv(PROPERTY_JDBC_DATABASE_USERNAME));
41
        properties.setProperty(PROPERTY_JDBC_DATABASE_PASSWORD, System.getenv(PROPERTY_JDBC_DATABASE_PASSWORD));
42

  
43
        InputStream inputStream = Resources.getResourceAsStream(CONFIGURATION);
44
        return new SqlSessionFactoryBuilder().build(inputStream, properties);
45
    }
46

  
47
    private static void initDatabase(SqlSessionFactory sqlSessionFactory) {
48
        try (SqlSession session = sqlSessionFactory.openSession()) {
49
            InputStream inputStream = Resources.getResourceAsStream(DB_INIT_SCRIPT);
50
            InputStreamReader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
51

  
52
            ScriptRunner sr = new ScriptRunner(session.getConnection());
53
            sr.runScript(reader);
54

  
55
            session.commit();
56
        } catch (Exception e) {
57
            throw new DataAccessException(e);
58
        }
59
    }
25 60
}
sources/imiger-core/src/main/resources/create_table.sql
1

  
2

  
3
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
4
SET time_zone = "+00:00";
5

  
6
--
7
-- Struktura tabulky `user`
8
--
9

  
10
CREATE TABLE IF NOT EXISTS `user` (
11
  `id` int(11) NOT NULL AUTO_INCREMENT,
12
  `nick` varchar(50) COLLATE utf8_czech_ci NOT NULL,
13
  `name` varchar(255) COLLATE utf8_czech_ci NOT NULL DEFAULT '',
14
  `psw` varchar(60) COLLATE utf8_czech_ci NOT NULL,
15
  `session` varchar(50) COLLATE utf8_czech_ci NOT NULL,
16
  `active` tinyint(1) NOT NULL,
17
  `created` datetime NOT NULL,
18
  `email` varchar(50) COLLATE utf8_czech_ci NOT NULL,
19
   CONSTRAINT PK_user PRIMARY KEY (`id`)
20
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
21

  
22
--
23
-- Struktura tabulky `diagram`
24
--
25

  
26
CREATE TABLE IF NOT EXISTS `diagram` (
27
  `id` int(11) NOT NULL AUTO_INCREMENT,
28
  `name` varchar(255) COLLATE utf8_czech_ci NOT NULL,
29
  `created` datetime NOT NULL,
30
  `last_update` datetime NOT NULL,
31
  `user_id` int(11) NOT NULL,
32
  `public` tinyint(1) NOT NULL DEFAULT '0',
33
  `graph_json` longtext COLLATE utf8_czech_ci NOT NULL DEFAULT '',
34
  CONSTRAINT PK_diagram PRIMARY KEY (`id`),
35
  CONSTRAINT  FK_user_diagram FOREIGN KEY (`user_id`) REFERENCES user(`id`)
36
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
37

  
sources/imiger-core/src/main/resources/mybatis-config.xml
9 9
            <transactionManager type="JDBC"/>
10 10
            <dataSource type="POOLED">
11 11
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
12
                <property name="url" value="jdbc:mysql://localhost/visualization_tool?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"/>
13
                <property name="username" value="admin"/>
14
                <property name="password" value="admin"/>
12
                <property name="url" value="${JDBC_DATABASE_URL}"/>
13
                <property name="username" value="${JDBC_DATABASE_USERNAME}"/>
14
                <property name="password" value="${JDBC_DATABASE_PASSWORD}"/>
15 15
            </dataSource>
16 16
        </environment>
17 17
    </environments>

Také k dispozici: Unified diff