Spring Boot + Angular 6 example | Spring Data JPA + REST + PostgreSQL CRUD example

spring-boot-angular-6-example-spring-data-rest-postgresql-example-feature-image-new

In this tutorial, we show you Angular 6 Http Client & Spring Boot Server example that uses Spring JPA to do CRUD with PostgreSQL and Angular 6 as a front-end technology to make request and receive response.

Related Posts:
How to use Spring JPA with PostgreSQL | Spring Boot
Spring JPA + PostgreSQL + AngularJS example | Spring Boot

I. Technologies

– Java 1.8
– Maven 3.3.9
– Spring Tool Suite – Version 3.8.4.RELEASE
– Spring Boot: 2.0.3.RELEASE
– Angular 6
– RxJS 6

II. Overview

angular-http-service-architecture

Demo

1. Spring Boot Server

spring-boot-angular-6-spring-rest-api-data-postgresql-spring-server-architecture

2. Angular 6 Client

spring-boot-angular-6-spring-rest-api-data-postgresql-angular-client-architecture

III. Practice

1. Project Structure

1.1 Spring Boot Server

spring-boot-angular-6-spring-rest-api-data-postgresql-spring-server-structure

Customer class corresponds to entity and table customer.
CustomerRepository is an interface extends CrudRepository, will be autowired in CustomerController for implementing repository methods and custom finder methods.
CustomerController is a REST Controller which has request mapping methods for RESTful requests such as: getAllCustomers, postCustomer, deleteCustomer, deleteAllCustomers, findByAge, updateCustomer.
– Configuration for Spring Datasource and Spring JPA properties in application.properties
Dependencies for Spring Boot and PostgreSQL in pom.xml

1.2 Angular 6 Client

spring-boot-angular-6-spring-rest-api-data-postgresql-angular-client-structure

In this example, we focus on:
– 4 components: customers-list, customer-details, create-customer, search-customer.
– 3 modules: FormsModule, HttpClientModule, AppRoutingModule.
customer.ts: class Customer (id, firstName, lastName)
customer.service.ts: Service for Http Client methods

2. How to do

2.1 Spring Boot Server

2.1.1 Dependency
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
	<groupId>org.postgresql</groupId>
	<artifactId>postgresql</artifactId>
	<scope>runtime</scope>
</dependency>
2.1.2 Customer – Data Model

model/Customer.java


package com.javasampleapproach.springrest.postgresql.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "customer")
public class Customer {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private long id;

	@Column(name = "name")
	private String name;

	@Column(name = "age")
	private int age;

	@Column(name = "active")
	private boolean active;

	public Customer() {
	}

	public Customer(String name, int age) {
		this.name = name;
		this.age = age;
		this.active = false;
	}

	public long getId() {
		return id;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getName() {
		return this.name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getAge() {
		return this.age;
	}

	public boolean isActive() {
		return active;
	}

	public void setActive(boolean active) {
		this.active = active;
	}

	@Override
	public String toString() {
		return "Customer [id=" + id + ", name=" + name + ", age=" + age + ", active=" + active + "]";
	}
}
2.1.3 JPA Repository

repo/CustomerRepository.java


package com.javasampleapproach.springrest.postgresql.repo;

import java.util.List;

import org.springframework.data.repository.CrudRepository;

import com.javasampleapproach.springrest.postgresql.model.Customer;

public interface CustomerRepository extends CrudRepository {
	List findByAge(int age);
}
2.1.4 REST Controller

controller/CustomerController.java


package com.javasampleapproach.springrest.postgresql.controller;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.javasampleapproach.springrest.postgresql.model.Customer;
import com.javasampleapproach.springrest.postgresql.repo.CustomerRepository;

@CrossOrigin(origins = "http://localhost:4200")
@RestController
@RequestMapping("/api")
public class CustomerController {

	@Autowired
	CustomerRepository repository;

	@GetMapping("/customers")
	public List getAllCustomers() {
		System.out.println("Get all Customers...");

		List customers = new ArrayList<>();
		repository.findAll().forEach(customers::add);

		return customers;
	}

	@PostMapping(value = "/customers/create")
	public Customer postCustomer(@RequestBody Customer customer) {

		Customer _customer = repository.save(new Customer(customer.getName(), customer.getAge()));
		return _customer;
	}

	@DeleteMapping("/customers/{id}")
	public ResponseEntity deleteCustomer(@PathVariable("id") long id) {
		System.out.println("Delete Customer with ID = " + id + "...");

		repository.deleteById(id);

		return new ResponseEntity<>("Customer has been deleted!", HttpStatus.OK);
	}

	@DeleteMapping("/customers/delete")
	public ResponseEntity deleteAllCustomers() {
		System.out.println("Delete All Customers...");

		repository.deleteAll();

		return new ResponseEntity<>("All customers have been deleted!", HttpStatus.OK);
	}

	@GetMapping(value = "customers/age/{age}")
	public List findByAge(@PathVariable int age) {

		List customers = repository.findByAge(age);
		return customers;
	}

	@PutMapping("/customers/{id}")
	public ResponseEntity updateCustomer(@PathVariable("id") long id, @RequestBody Customer customer) {
		System.out.println("Update Customer with ID = " + id + "...");

		Optional customerData = repository.findById(id);

		if (customerData.isPresent()) {
			Customer _customer = customerData.get();
			_customer.setName(customer.getName());
			_customer.setAge(customer.getAge());
			_customer.setActive(customer.isActive());
			return new ResponseEntity<>(repository.save(_customer), HttpStatus.OK);
		} else {
			return new ResponseEntity<>(HttpStatus.NOT_FOUND);
		}
	}
}
2.1.5 Configuration for Spring Datasource & JPA properties

application.properties


spring.datasource.url=jdbc:postgresql://localhost/testdb
spring.datasource.username=postgres
spring.datasource.password=123
spring.jpa.generate-ddl=true

2.2 Angular 6 Client

2.2.0 Create Service & Components

Run commands below:
ng g s customer
ng g c create-customer
ng g c customer-details
ng g c customers-list
ng g c search-customers
On each Component selector, delete app- prefix, then change tslint.json rules"component-selector" to false.

2.2.1 Model

customer.ts


export class Customer {
    id: number;
    name: string;
    age: number;
    active: boolean;
}
2.2.2 CustomerService

customer.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class CustomerService {

  private baseUrl = 'http://localhost:8080/api/customers';

  constructor(private http: HttpClient) { }

  getCustomer(id: number): Observable<Object> {
    return this.http.get(`${this.baseUrl}/${id}`);
  }

  createCustomer(customer: Object): Observable<Object> {
    return this.http.post(`${this.baseUrl}` + `/create`, customer);
  }

  updateCustomer(id: number, value: any): Observable<Object> {
    return this.http.put(`${this.baseUrl}/${id}`, value);
  }

  deleteCustomer(id: number): Observable<any> {
    return this.http.delete(`${this.baseUrl}/${id}`, { responseType: 'text' });
  }

  getCustomersList(): Observable<any> {
    return this.http.get(`${this.baseUrl}`);
  }

  getCustomersByAge(age: number): Observable<any> {
    return this.http.get(`${this.baseUrl}/age/${age}`);
  }

  deleteAll(): Observable<any> {
    return this.http.delete(`${this.baseUrl}` + `/delete`, { responseType: 'text' });
  }
}
2.2.3 Components

– CustomerDetailsComponent:
customer-details/customer-details.component.ts

import { Component, OnInit, Input } from '@angular/core';
import { CustomerService } from '../customer.service';
import { Customer } from '../customer';

import { CustomersListComponent } from '../customers-list/customers-list.component';

@Component({
  selector: 'customer-details',
  templateUrl: './customer-details.component.html',
  styleUrls: ['./customer-details.component.css']
})
export class CustomerDetailsComponent implements OnInit {

  @Input() customer: Customer;

  constructor(private customerService: CustomerService, private listComponent: CustomersListComponent) { }

  ngOnInit() {
  }

  updateActive(isActive: boolean) {
    this.customerService.updateCustomer(this.customer.id,
      { name: this.customer.name, age: this.customer.age, active: isActive })
      .subscribe(
        data => {
          console.log(data);
          this.customer = data as Customer;
        },
        error => console.log(error));
  }

  deleteCustomer() {
    this.customerService.deleteCustomer(this.customer.id)
      .subscribe(
        data => {
          console.log(data);
          this.listComponent.reloadData();
        },
        error => console.log(error));
  }
}

customer-details/customer-details.component.html

<div *ngIf="customer">
  <div>
    <label>Name: </label> {{customer.name}}
  </div>
  <div>
    <label>Age: </label> {{customer.age}}
  </div>
  <div>
    <label>Active: </label> {{customer.active}}
  </div>

  <span class="button is-small btn-primary" *ngIf='customer.active' (click)='updateActive(false)'>Inactive</span>

  <span class="button is-small btn-primary" *ngIf='!customer.active' (click)='updateActive(true)'>Active</span>

  <span class="button is-small btn-danger" (click)='deleteCustomer()'>Delete</span>

  <hr/>
</div>

– CustomersListComponent:
customers-list/customers-list.component.ts


import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';

import { CustomerService } from '../customer.service';
import { Customer } from '../customer';

@Component({
  selector: 'customers-list',
  templateUrl: './customers-list.component.html',
  styleUrls: ['./customers-list.component.css']
})
export class CustomersListComponent implements OnInit {

  customers: Observable;

  constructor(private customerService: CustomerService) { }

  ngOnInit() {
    this.reloadData();
  }

  deleteCustomers() {
    this.customerService.deleteAll()
      .subscribe(
        data => {
          console.log(data);
          this.reloadData();
        },
        error => console.log('ERROR: ' + error));
  }

  reloadData() {
    this.customers = this.customerService.getCustomersList();
  }
}

customers-list/customers-list.component.html

<h1>Customers</h1>

<div *ngFor="let customer of customers | async" style="width: 300px;">
  <customer-details [customer]='customer'></customer-details>
</div>

<div>
  <button type="button" class="button btn-danger" (click)='deleteCustomers()'>Delete All</button>
</div>

– CreateCustomerComponent:
create-customer/create-customer.component.ts


import { Component, OnInit } from '@angular/core';

import { Customer } from '../customer';
import { CustomerService } from '../customer.service';

@Component({
  selector: 'create-customer',
  templateUrl: './create-customer.component.html',
  styleUrls: ['./create-customer.component.css']
})
export class CreateCustomerComponent implements OnInit {

  customer: Customer = new Customer();
  submitted = false;

  constructor(private customerService: CustomerService) { }

  ngOnInit() {
  }

  newCustomer(): void {
    this.submitted = false;
    this.customer = new Customer();
  }

  save() {
    this.customerService.createCustomer(this.customer)
      .subscribe(data => console.log(data), error => console.log(error));
    this.customer = new Customer();
  }

  onSubmit() {
    this.submitted = true;
    this.save();
  }
}

create-customer/create-customer.component.html

<h3>Create Customer</h3>
<div [hidden]="submitted" style="width: 300px;">
  <form (ngSubmit)="onSubmit()">
    <div class="form-group">
      <label for="name">Name</label>
      <input type="text" class="form-control" id="name" required [(ngModel)]="customer.name" name="name">
    </div>

    <div class="form-group">
      <label for="age">Age</label>
      <input type="text" class="form-control" id="age" required [(ngModel)]="customer.age" name="age">
    </div>

    <button type="submit" class="btn btn-success">Submit</button>
  </form>
</div>

<div [hidden]="!submitted">
  <h4>You submitted successfully!</h4>
  <button class="btn btn-success" (click)="newCustomer()">Add</button>
</div>

– SearchCustomersComponent:
search-customers/search-customers.component.ts


import { Component, OnInit } from '@angular/core';
import { Customer } from '../customer';
import { CustomerService } from '../customer.service';

@Component({
  selector: 'search-customers',
  templateUrl: './search-customers.component.html',
  styleUrls: ['./search-customers.component.css']
})
export class SearchCustomersComponent implements OnInit {

  age: number;
  customers: Customer[];

  constructor(private dataService: CustomerService) { }

  ngOnInit() {
    this.age = 0;
  }

  private searchCustomers() {
    this.dataService.getCustomersByAge(this.age)
      .subscribe(customers => this.customers = customers);
  }

  onSubmit() {
    this.searchCustomers();
  }
}

search-customers/search-customers.component.html

<h3>Find By Age</h3>
<div style="width: 300px;">
  <form (ngSubmit)="onSubmit()">
    <div class="form-group">
      <label for="lastname">Age</label>
      <input type="text" class="form-control" id="age" required [(ngModel)]="age" name="age">
    </div>

    <div class="btn-group">
      <button type="submit" class="btn btn-success">Submit</button>
    </div>
  </form>
</div>
<ul>
  <li *ngFor="let customer of customers">
    <h4>{{customer.id}} - {{customer.name}} {{customer.age}}</h4>
  </li>
</ul>
2.2.4 AppRoutingModule

app-routing.module.ts


import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { CustomersListComponent } from './customers-list/customers-list.component';
import { CreateCustomerComponent } from './create-customer/create-customer.component';
import { SearchCustomersComponent } from './search-customers/search-customers.component';

const routes: Routes = [
    { path: '', redirectTo: 'customer', pathMatch: 'full' },
    { path: 'customer', component: CustomersListComponent },
    { path: 'add', component: CreateCustomerComponent },
    { path: 'findbyage', component: SearchCustomersComponent },
];

@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})

export class AppRoutingModule { }

And AppComponent HTML for routing:
app.component.html

<div style="padding: 20px;">
  <h1 style="color: blue">{{title}}</h1>
  <h3>{{description}}</h3>
  <nav>
    <a routerLink="customer" class="btn btn-primary active" role="button" routerLinkActive="active">Customers</a>
    <a routerLink="add" class="btn btn-primary active" role="button" routerLinkActive="active">Add</a>
    <a routerLink="findbyage" class="btn btn-primary active" role="button" routerLinkActive="active">Search</a>
  </nav>
  <router-outlet></router-outlet>
</div>
2.2.5 AppModule

app.module.ts


import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';

import { AppComponent } from './app.component';
import { CreateCustomerComponent } from './create-customer/create-customer.component';
import { CustomerDetailsComponent } from './customer-details/customer-details.component';
import { CustomersListComponent } from './customers-list/customers-list.component';
import { SearchCustomersComponent } from './search-customers/search-customers.component';
import { AppRoutingModule } from './app-routing.module';
import { HttpClientModule } from '@angular/common/http';

@NgModule({
  declarations: [
    AppComponent,
    CreateCustomerComponent,
    CustomerDetailsComponent,
    CustomersListComponent,
    SearchCustomersComponent
  ],
  imports: [
    BrowserModule,
    FormsModule,
    AppRoutingModule,
    HttpClientModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

3. Run & Check Result

Build and Run Spring Boot project with commandlines: mvn clean install and mvn spring-boot:run.
– Run the Angular App with command: ng serve.

– Open browser for url http://localhost:4200/:
Add Customer:

spring-boot-angular-6-spring-rest-api-data-postgresql-add-customer

Show Customers:

spring-boot-angular-6-spring-rest-api-data-postgresql-show-customers

Click on Active button to update Customer status:

spring-boot-angular-6-spring-rest-api-data-postgresql-update-customer

Search Customers by Age:

spring-boot-angular-6-spring-rest-api-data-postgresql-search-customers

Delete a Customer:

spring-boot-angular-6-spring-rest-api-data-postgresql-delete-customer

Delete All Customers:

spring-boot-angular-6-spring-rest-api-data-postgresql-delete-all-customers

IV. Source Code

Angular6SpringBoot-Client
SpringRESTPostgreSQL-Server

79 thoughts on “Spring Boot + Angular 6 example | Spring Data JPA + REST + PostgreSQL CRUD example”

  1. I’m beginner and I’m trying to follow your tutorial. One thing puzzled me: why in CustomerController inside postCustomer method you saved Customer like this:

    repository.save(new Customer(customer.getName(), customer.getAge()));
    

    instead of just simply:

    repository.save(customer)
    

    (object from method parameter)?

    1. Hi Pawel,

      Please look at the constructor method of Customer class:

      public Customer(String name, int age) {
      	this.name = name;
      	this.age = age;
      	this.active = false;
      }
      

      You can see that we specify the value of active field, and not mention the value of id field (that will be generated automatically by JPA), if you use the customer from input param of the function:

      public Customer postCustomer(@RequestBody Customer customer) {...}
      

      customer.active field could be true by the input 🙂

      Regards,
      ozenero.

  2. I am getting an error while hitting add details

    Access to XMLHttpRequest at ‘http://localhost:8080/api/customers/create’ from origin ‘http://localhost:4200’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

    1. Please add
      import org.springframework.web.bind.annotation.CrossOrigin;

      @CrossOrigin(origins=”http://localhost:4200″)

  3. Search by age is good. But if i want to search age by comma separated.

    Example

    search 27,23,34.

    I want to display all above age group. Could you please let us know

  4. This example works fine on desktop, but from mobile does not create new customers. Can you please give some information ? I am new on angular!

  5. Do you have a spam problem on this website; I also am a blogger,
    and I was wanting to know your situation; many of us have developed some nice methods
    and we are looking to trade solutions with other folks, be sure to shoot me an e-mail if
    interested.

  6. When someone writes an paragraph he/she retains the plan of a user in his/her mind that
    how a user can know it. Therefore that’s why this article is amazing.
    Thanks!

  7. It’s perfect time to make some plans for the future and it’s
    time to be happy. I’ve read this post and if I
    could I desire to suggest you some interesting things or advice.
    Maybe you can write next articles referring to this article.

    I desire to read even more things about it!

  8. Oh my goodness! Amazing article dude! Thank you
    so much, However I am going through difficulties with your RSS.
    I don’t know the reason why I can’t join it. Is there anybody having the same
    RSS problems? Anyone who knows the solution will
    you kindly respond? Thanks!!

  9. Do you have a spam issue on this blog; I also
    am a blogger, and I was wondering your situation; we have created some nice procedures and we are looking to trade techniques with other folks, be sure to shoot me
    an email if interested.

  10. Thanks for the good writeup. It actually used to be a amusement
    account it. Glance advanced to far introduced agreeable from you!
    By the way, how can we keep up a correspondence?

  11. I’m not that much of a internet reader to be honest
    but your blogs really nice, keep it up! I’ll go ahead and bookmark
    your site to come back later. Cheers

  12. Hey! This post couldn’t be written any better! Reading
    through this post reminds me of my good old room mate!
    He always kept talking about this. I will forward this post to him.

    Pretty sure he will have a good read. Many thanks for
    sharing!

  13. Hello, i think that i saw you visited my web site thus i came to “return the favor”.I am attempting
    to find things to improve my site!I suppose its
    ok to use some of your ideas!!

  14. Every weekend i used to visit this web page, for the reason that i wish for enjoyment,
    for the reason that this this web site conations
    genuinely pleasant funny stuff too.

  15. Woah! I’m really enjoying the template/theme of this site.
    It’s simple, yet effective. A lot of times it’s difficult to get that
    “perfect balance” between user friendliness and appearance.
    I must say that you’ve done a great job with this. Also,
    the blog loads very fast for me on Chrome. Superb Blog!

  16. Amazing blog! Is your theme custom made or did you download it from somewhere?
    A theme like yours with a few simple adjustements would really make my blog jump out.
    Please let me know where you got your theme. Bless you

  17. Hello there! Do you use Twitter? I’d like to follow you if that would be okay.
    I’m absolutely enjoying your blog and look forward to new posts.

  18. hello there and thank you for your information –
    I’ve definitely picked up anything new from right here.
    I did however expertise some technical issues using this site,
    since I experienced to reload the site a lot of times previous to I could
    get it to load properly. I had been wondering if your web hosting is
    OK? Not that I’m complaining, but slow loading instances times will often affect
    your placement in google and could damage your quality score if advertising and marketing with
    Adwords. Well I am adding this RSS to my e-mail and can look out for much more of your respective intriguing
    content. Ensure that you update this again very soon.

  19. Hey just wanted to give you a quick heads up. The words in your
    article seem to be running off the screen in Ie.
    I’m not sure if this is a format issue or something to do with internet browser compatibility but I thought I’d post to let you know.
    The layout look great though! Hope you get the problem solved soon. Many thanks

  20. Hey there just wanted to give you a quick heads up.
    The text in your post seem to be running off the screen in Internet explorer.
    I’m not sure if this is a formatting issue or something to do with internet browser compatibility but I figured I’d
    post to let you know. The design look great though! Hope you get the problem fixed soon. Cheers

  21. Hello there! Would you mind if I share your blog with my myspace group?
    There’s a lot of people that I think would really enjoy your
    content. Please let me know. Cheers

  22. Hello! I know this is kinda off topic however ,
    I’d figured I’d ask. Would you be interested in trading links or maybe guest authoring a blog article or vice-versa?
    My blog addresses a lot of the same topics as yours and I think we could greatly benefit from each
    other. If you are interested feel free to send me an e-mail.
    I look forward to hearing from you! Terrific blog by the way!

  23. Does your blog have a contact page? I’m having trouble locating it but, I’d like to shoot you an email.

    I’ve got some creative ideas for your blog you might be interested in hearing.
    Either way, great website and I look forward to seeing it improve over time.

  24. Superb website you have here but I was wanting to know if you knew of any user
    discussion forums that cover the same topics talked about
    in this article? I’d really love to be a part of online community where I can get opinions from other knowledgeable individuals that share the same interest.
    If you have any recommendations, please let me know.

    Thank you!

  25. Do you have a spam issue on this site; I also am a blogger, and I was wanting to know
    your situation; many of us have created some nice procedures
    and we are looking to exchange strategies with other folks, why not shoot
    me an e-mail if interested.

  26. I’ve been browsing online more than three hours today, yet I never found any
    interesting article like yours. It’s pretty worth enough for me.
    In my opinion, if all webmasters and bloggers made good content as you
    did, the web will be much more useful than ever before.

  27. Just desire to say your article is as astounding.
    The clearness in your submit is simply great and that i can suppose
    you are a professional on this subject. Well
    with your permission allow me to grab your feed to stay updated with
    approaching post. Thank you one million and please keep up
    the enjoyable work.

  28. I was suggested this blog by my cousin.
    I’m not sure whether this post is written by him as nobody else know such detailed about my trouble.
    You’re amazing! Thanks!

  29. I have been exploring for a bit for any high-quality articles or blog posts in this sort
    of area . Exploring in Yahoo I finally stumbled upon this website.

    Reading this info So i am glad to express that I’ve an incredibly excellent uncanny feeling I found out exactly what I needed.
    I most undoubtedly will make certain to don?t put out
    of your mind this web site and provides it a glance on a relentless basis.

  30. Does your site have a contact page? I’m having trouble locating it but, I’d like to shoot you an email.
    I’ve got some ideas for your blog you might be interested in hearing.
    Either way, great blog and I look forward to seeing it develop
    over time.

  31. Its like you read my mind! You seem to know so much about this,
    like you wrote the book in it or something. I think
    that you can do with a few pics to drive the message home a bit,
    but other than that, this is excellent blog.

    A fantastic read. I’ll definitely be back.

  32. With havin so much written content do you ever run into any problems of plagorism or copyright infringement?
    My blog has a lot of unique content I’ve either created myself or outsourced
    but it looks like a lot of it is popping it up
    all over the internet without my agreement. Do you know any methods to help protect against content from being stolen? I’d really
    appreciate it.

  33. Wonderful beat ! I wish to apprentice at the same time as you amend your website, how
    could i subscribe for a weblog web site? The account aided me a appropriate deal.
    I had been a little bit familiar of this your broadcast offered vivid clear concept

  34. I am not sure the place you are getting your information, however great topic.
    I needs to spend some time finding out much more or figuring out
    more. Thank you for wonderful info I was looking for this info for my mission.

  35. I was very pleased to uncover this great site. I wanted to thank you
    for ones time for this fantastic read!! I definitely really liked every little bit of it and I
    have you book-marked to look at new stuff on your site.

  36. I do accept as true with all the ideas you have presented to your post.

    They’re very convincing and can definitely work. Nonetheless, the posts are very short for newbies.
    May just you please prolong them a bit from subsequent time?
    Thank you for the post.

  37. I’m not sure exactly why but this website is loading extremely slow for me.
    Is anyone else having this issue or is it a problem on my end?
    I’ll check back later and see if the problem still exists.

  38. Awesome website you have here but I was wondering if you knew of any forums that cover the same topics
    discussed here? I’d really love to be a part of group where I can get responses from other experienced individuals that share the
    same interest. If you have any recommendations, please let me know.
    Kudos!

  39. Excellent items from you, man. I’ve consider your stuff previous to and you are just extremely fantastic.
    I really like what you’ve acquired right here, really like what you’re saying
    and the way in which by which you say it. You make it enjoyable
    and you continue to care for to keep it wise. I can’t
    wait to read much more from you. That is really a wonderful web site.

  40. When someone writes an piece of writing he/she maintains the
    thought of a user in his/her mind that how a user can know it.

    So that’s why this article is amazing. Thanks!

  41. Wow, awesome weblog layout! How lengthy have you ever been blogging for? you make running a blog glance easy. The whole glance of your website is magnificent, let alone the content!

Leave a Reply

Your email address will not be published. Required fields are marked *