Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517

SpringRepository: переопределить datasource

17.12.2014, 14:51. Показов 1313. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Захотел таки добавить к серверной части spring, но что-то spring в плане конфигурации вообще ушёл в какие-то дали что я теперь не могу понять как ему втюхать мой DataSource, подскажите пожалуйста.

Что есть:
приложение из стандартного примера http://spring.io/guides/gs/accessing-data-jpa/
тоесть собственно сама сущность и реп. к ней:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Entity
public class Customer {
 
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;
    private String firstName;
    private String lastName;
 
    protected Customer() {}
 
    public Customer(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}
 
public interface CustomerRepository extends CrudRepository<Customer, Long> {
    List<Customer> findByLastName(String lastName);
}
А потом чёрная магия, которую я не могу победить:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@Configuration
@EnableAutoConfiguration
public class Application {
 
    public static void main(String[] args) {
 
        ConfigurableApplicationContext context = SpringApplication.run(Application.class);
        DataSource dataSource = context.getBean(DataSource.class);
        CustomerRepository repository = context.getBean(CustomerRepository.class);
 
        // save a couple of customers
        repository.save(new Customer("Jack", "Bauer"));
        repository.save(new Customer("Chloe", "O'Brian"));
 
        // fetch an individual customer by ID
        Customer customer = repository.findOne(1L);
        System.out.println("Customer found with findOne(1L):");
        System.out.println("--------------------------------");
        System.out.println(customer);
        System.out.println();
        context.close();
    }
 
}
Проблема в том что в этой автоконфигурации всё основано на угадывание чего я хочу, но я не хочу стандартную H2 базу данных, я хочу перенаправить это всё на оракл. Драйвер я подложил, но на spring-config.xml я вижу оно чихать хотело, как и на persistence.xml ... как же мне то теперь отдать этому спрингу конект к субд ?
Я конечно пытался убрать аннотацию EnableAutoConfiguration и сделать по старинке:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
@Configuration
public class Application {
 
    public static void main(String[] args) {
 
        //ConfigurableApplicationContext context = SpringApplication.run(Application.class);
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        DataSource dataSource = context.getBean(DataSource.class);
        CustomerRepository repository = context.getBean(CustomerRepository.class);
С конфигурацией:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xsi:schemaLocation="http://www.springframework.org/schema/beans [url]http://www.springframework.org/schema/beans/spring-beans.xsd[/url] [url]http://www.springframework.org/schema/context[/url] [url]http://www.springframework.org/schema/context/spring-context.xsd[/url] [url]http://www.springframework.org/schema/data/jpa[/url] http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
    <context:annotation-config />
    <jpa:repositories base-package="hello"/>
 
    <bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">
        <property name="dataSourceName" value="ds"/>
        <property name="URL" value="jdbc:oracle:thin:@//localhost:1521/XE"/>
        <property name="user" value="app"/>
        <property name="password" value="app"/>
    </bean>
 
    <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        <property name="showSql" value="true"/>
        <property name="generateDdl" value="true"/>
        <property name="database" value="MYSQL"/>
    </bean>
 
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
        <!-- spring based scanning for entity classes>-->
        <property name="packagesToScan" value="hello"/>
    </bean>
</beans>

Но это не сильно помогло и я получил кучу грозных сообщений "NoSuchBeanDefinitionException: No bean named 'transactionManager' is defined".
Подскажите куда копать пожалуйста.

Добавлено через 1 час 1 минуту
Мда, а ларчик то просто открывался, достаточно отдать datasource в классе с конфигом.
Java
1
2
3
4
5
6
7
8
9
    @Bean
    public DataSource dataSource(){
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("oracle.jdbc.pool.OracleDataSource");
        dataSource.setUrl("jdbc:oracle:thin:@//localhost:1521/XE");
        dataSource.setUsername( "app" );
        dataSource.setPassword( "app" );
        return dataSource;
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2014, 14:51
Ответы с готовыми решениями:

DataSource
Пишу в asp.net на C#. Удивило отсутствие datasource, с помощью которой раньше создавал клиент-серверные виндоус приложения. Как в asp.net...

DataSource
Ребята помогите!!! :help: Такая проблема: у меня формируется отчет туда вносятся данные.... как получить доступ к етим данным!? На...

Переопределить свйоство
Подскажие как в Combobox переопределить свойтво datasource. Что бы ему присвавалось не DataSource, а dataTable. И чтобы это можно было...

1
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
21.12.2014, 02:41  [ТС]
Всё же непонятно для меня работает эта автоконфигурация в новом спринге поэтому придётся спросить снова: в каких случаях спринг начинает лезть к объявленным DataSource в классе с конфигурацией?
Потому что я рядом создал проект с классом:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@ComponentScan
@EnableAutoConfiguration
@Configuration
public class Application{
    @Bean
    public DataSource dataSource(){
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("oracle.jdbc.pool.OracleDataSource");
        dataSource.setUrl("jdbc:oracle:thin:@//localhost:1521/XE");
        dataSource.setUsername("app");
        dataSource.setPassword("app");
        return dataSource();
    }
 
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
и зависимостями maven:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.0.RELEASE</version>
    </parent>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    </dependencies>
И ... и оно нифига не хочет подбирать мой DataSource, но выкидывает exception
Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.
ещё до того как полезет к моему определённому DataSource. Вот я тупо скопировал maven файл и тупо скопировал Application класс и в одном проекте где я в первый раз экспериментировал оно вызывает мой метод dataSource, а в другом - нет. Почему так? Что должен найти спринг чтобы перестать искать DataSouce где-то у себя в недрях и забрать тот что отдаю я в классе Aplication? Драйвер для оракла в обоих случаях я подложить и закинуть в classpath не забыл.

Добавлено через 11 часов 56 минут
Грабли нашёл: в новом проекте idea сделала медвежую услугу и после того как я написал DataSource вместо того чтобы предложить на выбор она решила что мне больше всего подойдёт это
Java
1
import javax.activation.DataSource;
и спрашивать меня не надо, не замечал пока не попытался создать бин отдающий EntityManagerFactory где дёрнул setDataSource метод и не увидел окошко что типы то не совпадают.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.12.2014, 02:41
Помогаю со студенческими работами здесь

Переопределить функцию
Добрый день. Занимаюсь портированием стандартного gl.h, на динамический метод вызова. (Не спрашивайте зачем... нужно скрыть таблицу...

Переопределить LOGFONTA
Вот мне надо изменить размер буковок, как это сделать? ... Graphics graphics(pd.hDC); Pen pen(Color(255, 0, 0,...

Переопределить операции *, /, ==, !=
Для класса В переопределить операции согласно варианту (см. вариант в таблице). В основной программе продемонстрировать использование ...

Переопределить делегат
Доброго времени суток, использую QTableView для отображения таблиц SQLITE, в котором(заранее извиняюсь за кривую формулировку) все поля...

переопределить делегат
Доброго времени суток, необходимо запретить пользователю редактировать кое какие колонки в QTableView , полазил в инете нашел что самый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru